mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-04-30 10:26:52 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e784254679 | ||
|
|
d5e1edd284 |
@@ -14,24 +14,12 @@ pr:
|
|||||||
|
|
||||||
schedules:
|
schedules:
|
||||||
- cron: 0 8 * * *
|
- cron: 0 8 * * *
|
||||||
displayName: Nightly (main)
|
displayName: Nightly
|
||||||
always: true
|
always: true
|
||||||
branches:
|
branches:
|
||||||
include:
|
include:
|
||||||
- main
|
- main
|
||||||
- cron: 0 10 * * *
|
- stable-*
|
||||||
displayName: Nightly (active stable branches)
|
|
||||||
always: true
|
|
||||||
branches:
|
|
||||||
include:
|
|
||||||
- stable-2
|
|
||||||
- stable-3
|
|
||||||
- cron: 0 11 * * 0
|
|
||||||
displayName: Weekly (old stable branches)
|
|
||||||
always: true
|
|
||||||
branches:
|
|
||||||
include:
|
|
||||||
- stable-1
|
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
- name: checkoutPath
|
- name: checkoutPath
|
||||||
@@ -68,19 +56,6 @@ stages:
|
|||||||
- test: 3
|
- test: 3
|
||||||
- test: 4
|
- test: 4
|
||||||
- test: extra
|
- test: extra
|
||||||
- stage: Sanity_2_12
|
|
||||||
displayName: Sanity 2.12
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
nameFormat: Test {0}
|
|
||||||
testFormat: 2.12/sanity/{0}
|
|
||||||
targets:
|
|
||||||
- test: 1
|
|
||||||
- test: 2
|
|
||||||
- test: 3
|
|
||||||
- test: 4
|
|
||||||
- stage: Sanity_2_11
|
- stage: Sanity_2_11
|
||||||
displayName: Sanity 2.11
|
displayName: Sanity 2.11
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
@@ -129,22 +104,6 @@ stages:
|
|||||||
parameters:
|
parameters:
|
||||||
nameFormat: Python {0}
|
nameFormat: Python {0}
|
||||||
testFormat: devel/units/{0}/1
|
testFormat: devel/units/{0}/1
|
||||||
targets:
|
|
||||||
- test: 2.7
|
|
||||||
- test: 3.5
|
|
||||||
- test: 3.6
|
|
||||||
- test: 3.7
|
|
||||||
- test: 3.8
|
|
||||||
- test: 3.9
|
|
||||||
- test: '3.10'
|
|
||||||
- stage: Units_2_12
|
|
||||||
displayName: Units 2.12
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
nameFormat: Python {0}
|
|
||||||
testFormat: 2.12/units/{0}/1
|
|
||||||
targets:
|
targets:
|
||||||
- test: 2.6
|
- test: 2.6
|
||||||
- test: 2.7
|
- test: 2.7
|
||||||
@@ -152,7 +111,7 @@ stages:
|
|||||||
- test: 3.6
|
- test: 3.6
|
||||||
- test: 3.7
|
- test: 3.7
|
||||||
- test: 3.8
|
- test: 3.8
|
||||||
- test: '3.10'
|
- test: 3.9
|
||||||
- stage: Units_2_11
|
- stage: Units_2_11
|
||||||
displayName: Units 2.11
|
displayName: Units 2.11
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
@@ -178,8 +137,13 @@ stages:
|
|||||||
nameFormat: Python {0}
|
nameFormat: Python {0}
|
||||||
testFormat: 2.10/units/{0}/1
|
testFormat: 2.10/units/{0}/1
|
||||||
targets:
|
targets:
|
||||||
|
- test: 2.6
|
||||||
- test: 2.7
|
- test: 2.7
|
||||||
|
- test: 3.5
|
||||||
- test: 3.6
|
- test: 3.6
|
||||||
|
- test: 3.7
|
||||||
|
- test: 3.8
|
||||||
|
- test: 3.9
|
||||||
- stage: Units_2_9
|
- stage: Units_2_9
|
||||||
displayName: Units 2.9
|
displayName: Units 2.9
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
@@ -209,8 +173,8 @@ stages:
|
|||||||
test: macos/11.1
|
test: macos/11.1
|
||||||
- name: RHEL 7.9
|
- name: RHEL 7.9
|
||||||
test: rhel/7.9
|
test: rhel/7.9
|
||||||
- name: RHEL 8.4
|
- name: RHEL 8.3
|
||||||
test: rhel/8.4
|
test: rhel/8.3
|
||||||
- name: FreeBSD 12.2
|
- name: FreeBSD 12.2
|
||||||
test: freebsd/12.2
|
test: freebsd/12.2
|
||||||
- name: FreeBSD 13.0
|
- name: FreeBSD 13.0
|
||||||
@@ -219,23 +183,6 @@ stages:
|
|||||||
- 1
|
- 1
|
||||||
- 2
|
- 2
|
||||||
- 3
|
- 3
|
||||||
- stage: Remote_2_12
|
|
||||||
displayName: Remote 2.12
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
testFormat: 2.12/{0}
|
|
||||||
targets:
|
|
||||||
- name: macOS 11.1
|
|
||||||
test: macos/11.1
|
|
||||||
- name: RHEL 8.4
|
|
||||||
test: rhel/8.4
|
|
||||||
- name: FreeBSD 13.0
|
|
||||||
test: freebsd/13.0
|
|
||||||
groups:
|
|
||||||
- 1
|
|
||||||
- 2
|
|
||||||
- stage: Remote_2_11
|
- stage: Remote_2_11
|
||||||
displayName: Remote 2.11
|
displayName: Remote 2.11
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
@@ -244,6 +191,8 @@ stages:
|
|||||||
parameters:
|
parameters:
|
||||||
testFormat: 2.11/{0}
|
testFormat: 2.11/{0}
|
||||||
targets:
|
targets:
|
||||||
|
- name: macOS 11.1
|
||||||
|
test: macos/11.1
|
||||||
- name: RHEL 7.9
|
- name: RHEL 7.9
|
||||||
test: rhel/7.9
|
test: rhel/7.9
|
||||||
- name: RHEL 8.3
|
- name: RHEL 8.3
|
||||||
@@ -265,6 +214,14 @@ stages:
|
|||||||
test: osx/10.11
|
test: osx/10.11
|
||||||
- name: macOS 10.15
|
- name: macOS 10.15
|
||||||
test: 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
|
||||||
|
test: freebsd/12.1
|
||||||
groups:
|
groups:
|
||||||
- 1
|
- 1
|
||||||
- 2
|
- 2
|
||||||
@@ -278,8 +235,6 @@ stages:
|
|||||||
targets:
|
targets:
|
||||||
- name: RHEL 8.2
|
- name: RHEL 8.2
|
||||||
test: rhel/8.2
|
test: rhel/8.2
|
||||||
- name: RHEL 7.8
|
|
||||||
test: rhel/7.8
|
|
||||||
- name: FreeBSD 12.0
|
- name: FreeBSD 12.0
|
||||||
test: freebsd/12.0
|
test: freebsd/12.0
|
||||||
groups:
|
groups:
|
||||||
@@ -295,12 +250,16 @@ stages:
|
|||||||
parameters:
|
parameters:
|
||||||
testFormat: devel/linux/{0}
|
testFormat: devel/linux/{0}
|
||||||
targets:
|
targets:
|
||||||
|
- name: CentOS 6
|
||||||
|
test: centos6
|
||||||
- name: CentOS 7
|
- name: CentOS 7
|
||||||
test: centos7
|
test: centos7
|
||||||
- name: Fedora 34
|
- name: CentOS 8
|
||||||
test: fedora34
|
test: centos8
|
||||||
- name: Fedora 35
|
- name: Fedora 32
|
||||||
test: fedora35
|
test: fedora32
|
||||||
|
- name: Fedora 33
|
||||||
|
test: fedora33
|
||||||
- name: openSUSE 15 py2
|
- name: openSUSE 15 py2
|
||||||
test: opensuse15py2
|
test: opensuse15py2
|
||||||
- name: openSUSE 15 py3
|
- name: openSUSE 15 py3
|
||||||
@@ -313,28 +272,6 @@ stages:
|
|||||||
- 1
|
- 1
|
||||||
- 2
|
- 2
|
||||||
- 3
|
- 3
|
||||||
- stage: Docker_2_12
|
|
||||||
displayName: Docker 2.12
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
testFormat: 2.12/linux/{0}
|
|
||||||
targets:
|
|
||||||
- name: CentOS 6
|
|
||||||
test: centos6
|
|
||||||
- name: CentOS 8
|
|
||||||
test: centos8
|
|
||||||
- name: Fedora 34
|
|
||||||
test: fedora34
|
|
||||||
- name: openSUSE 15 py3
|
|
||||||
test: opensuse15
|
|
||||||
- name: Ubuntu 20.04
|
|
||||||
test: ubuntu2004
|
|
||||||
groups:
|
|
||||||
- 1
|
|
||||||
- 2
|
|
||||||
- 3
|
|
||||||
- stage: Docker_2_11
|
- stage: Docker_2_11
|
||||||
displayName: Docker 2.11
|
displayName: Docker 2.11
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
@@ -343,12 +280,14 @@ stages:
|
|||||||
parameters:
|
parameters:
|
||||||
testFormat: 2.11/linux/{0}
|
testFormat: 2.11/linux/{0}
|
||||||
targets:
|
targets:
|
||||||
- name: CentOS 7
|
- name: CentOS 8
|
||||||
test: centos7
|
test: centos8
|
||||||
- name: Fedora 33
|
- name: Fedora 32
|
||||||
test: fedora33
|
test: fedora33
|
||||||
- name: openSUSE 15 py2
|
- name: openSUSE 15 py3
|
||||||
test: opensuse15py2
|
test: opensuse15
|
||||||
|
- name: Ubuntu 20.04
|
||||||
|
test: ubuntu2004
|
||||||
groups:
|
groups:
|
||||||
- 2
|
- 2
|
||||||
- 3
|
- 3
|
||||||
@@ -360,8 +299,12 @@ stages:
|
|||||||
parameters:
|
parameters:
|
||||||
testFormat: 2.10/linux/{0}
|
testFormat: 2.10/linux/{0}
|
||||||
targets:
|
targets:
|
||||||
|
- name: CentOS 8
|
||||||
|
test: centos8
|
||||||
- name: Fedora 32
|
- name: Fedora 32
|
||||||
test: fedora32
|
test: fedora32
|
||||||
|
- name: openSUSE 15 py3
|
||||||
|
test: opensuse15
|
||||||
- name: Ubuntu 16.04
|
- name: Ubuntu 16.04
|
||||||
test: ubuntu1604
|
test: ubuntu1604
|
||||||
groups:
|
groups:
|
||||||
@@ -375,6 +318,8 @@ stages:
|
|||||||
parameters:
|
parameters:
|
||||||
testFormat: 2.9/linux/{0}
|
testFormat: 2.9/linux/{0}
|
||||||
targets:
|
targets:
|
||||||
|
- name: CentOS 8
|
||||||
|
test: centos8
|
||||||
- name: Fedora 31
|
- name: Fedora 31
|
||||||
test: fedora31
|
test: fedora31
|
||||||
- name: openSUSE 15 py3
|
- name: openSUSE 15 py3
|
||||||
@@ -392,17 +337,6 @@ stages:
|
|||||||
parameters:
|
parameters:
|
||||||
nameFormat: Python {0}
|
nameFormat: Python {0}
|
||||||
testFormat: devel/cloud/{0}/1
|
testFormat: devel/cloud/{0}/1
|
||||||
targets:
|
|
||||||
- test: 2.7
|
|
||||||
- test: 3.9
|
|
||||||
- stage: Cloud_2_12
|
|
||||||
displayName: Cloud 2.12
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
nameFormat: Python {0}
|
|
||||||
testFormat: 2.12/cloud/{0}/1
|
|
||||||
targets:
|
targets:
|
||||||
- test: 3.8
|
- test: 3.8
|
||||||
- stage: Cloud_2_11
|
- stage: Cloud_2_11
|
||||||
@@ -414,6 +348,7 @@ stages:
|
|||||||
nameFormat: Python {0}
|
nameFormat: Python {0}
|
||||||
testFormat: 2.11/cloud/{0}/1
|
testFormat: 2.11/cloud/{0}/1
|
||||||
targets:
|
targets:
|
||||||
|
- test: 2.7
|
||||||
- test: 3.6
|
- test: 3.6
|
||||||
- stage: Cloud_2_10
|
- stage: Cloud_2_10
|
||||||
displayName: Cloud 2.10
|
displayName: Cloud 2.10
|
||||||
@@ -424,7 +359,7 @@ stages:
|
|||||||
nameFormat: Python {0}
|
nameFormat: Python {0}
|
||||||
testFormat: 2.10/cloud/{0}/1
|
testFormat: 2.10/cloud/{0}/1
|
||||||
targets:
|
targets:
|
||||||
- test: 3.5
|
- test: 3.6
|
||||||
- stage: Cloud_2_9
|
- stage: Cloud_2_9
|
||||||
displayName: Cloud 2.9
|
displayName: Cloud 2.9
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
@@ -434,7 +369,7 @@ stages:
|
|||||||
nameFormat: Python {0}
|
nameFormat: Python {0}
|
||||||
testFormat: 2.9/cloud/{0}/1
|
testFormat: 2.9/cloud/{0}/1
|
||||||
targets:
|
targets:
|
||||||
- test: 2.7
|
- test: 3.6
|
||||||
- stage: Summary
|
- stage: Summary
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
dependsOn:
|
dependsOn:
|
||||||
@@ -442,26 +377,21 @@ stages:
|
|||||||
- Sanity_2_9
|
- Sanity_2_9
|
||||||
- Sanity_2_10
|
- Sanity_2_10
|
||||||
- Sanity_2_11
|
- Sanity_2_11
|
||||||
- Sanity_2_12
|
|
||||||
- Units_devel
|
- Units_devel
|
||||||
- Units_2_9
|
- Units_2_9
|
||||||
- Units_2_10
|
- Units_2_10
|
||||||
- Units_2_11
|
- Units_2_11
|
||||||
- Units_2_12
|
|
||||||
- Remote_devel
|
- Remote_devel
|
||||||
- Remote_2_9
|
- Remote_2_9
|
||||||
- Remote_2_10
|
- Remote_2_10
|
||||||
- Remote_2_11
|
- Remote_2_11
|
||||||
- Remote_2_12
|
|
||||||
- Docker_devel
|
- Docker_devel
|
||||||
- Docker_2_9
|
- Docker_2_9
|
||||||
- Docker_2_10
|
- Docker_2_10
|
||||||
- Docker_2_11
|
- Docker_2_11
|
||||||
- Docker_2_12
|
|
||||||
- Cloud_devel
|
- Cloud_devel
|
||||||
- Cloud_2_9
|
- Cloud_2_9
|
||||||
- Cloud_2_10
|
- Cloud_2_10
|
||||||
- Cloud_2_11
|
- Cloud_2_11
|
||||||
- Cloud_2_12
|
|
||||||
jobs:
|
jobs:
|
||||||
- template: templates/coverage.yml
|
- template: templates/coverage.yml
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ mkdir "${agent_temp_directory}/coverage/"
|
|||||||
|
|
||||||
options=(--venv --venv-system-site-packages --color -v)
|
options=(--venv --venv-system-site-packages --color -v)
|
||||||
|
|
||||||
ansible-test coverage combine --group-by command --export "${agent_temp_directory}/coverage/" "${options[@]}"
|
ansible-test coverage combine --export "${agent_temp_directory}/coverage/" "${options[@]}"
|
||||||
|
|
||||||
if ansible-test coverage analyze targets generate --help >/dev/null 2>&1; then
|
if ansible-test coverage analyze targets generate --help >/dev/null 2>&1; then
|
||||||
# Only analyze coverage if the installed version of ansible-test supports it.
|
# Only analyze coverage if the installed version of ansible-test supports it.
|
||||||
|
|||||||
@@ -1,101 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
"""
|
|
||||||
Upload code coverage reports to codecov.io.
|
|
||||||
Multiple coverage files from multiple languages are accepted and aggregated after upload.
|
|
||||||
Python coverage, as well as PowerShell and Python stubs can all be uploaded.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import dataclasses
|
|
||||||
import pathlib
|
|
||||||
import shutil
|
|
||||||
import subprocess
|
|
||||||
import tempfile
|
|
||||||
import typing as t
|
|
||||||
import urllib.request
|
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass(frozen=True)
|
|
||||||
class CoverageFile:
|
|
||||||
name: str
|
|
||||||
path: pathlib.Path
|
|
||||||
flags: t.List[str]
|
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass(frozen=True)
|
|
||||||
class Args:
|
|
||||||
dry_run: bool
|
|
||||||
path: pathlib.Path
|
|
||||||
|
|
||||||
|
|
||||||
def parse_args() -> Args:
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument('-n', '--dry-run', action='store_true')
|
|
||||||
parser.add_argument('path', type=pathlib.Path)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
# Store arguments in a typed dataclass
|
|
||||||
fields = dataclasses.fields(Args)
|
|
||||||
kwargs = {field.name: getattr(args, field.name) for field in fields}
|
|
||||||
|
|
||||||
return Args(**kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
def process_files(directory: pathlib.Path) -> t.Tuple[CoverageFile, ...]:
|
|
||||||
processed = []
|
|
||||||
for file in directory.joinpath('reports').glob('coverage*.xml'):
|
|
||||||
name = file.stem.replace('coverage=', '')
|
|
||||||
|
|
||||||
# Get flags from name
|
|
||||||
flags = name.replace('-powershell', '').split('=') # Drop '-powershell' suffix
|
|
||||||
flags = [flag if not flag.startswith('stub') else flag.split('-')[0] for flag in flags] # Remove "-01" from stub files
|
|
||||||
|
|
||||||
processed.append(CoverageFile(name, file, flags))
|
|
||||||
|
|
||||||
return tuple(processed)
|
|
||||||
|
|
||||||
|
|
||||||
def upload_files(codecov_bin: pathlib.Path, files: t.Tuple[CoverageFile, ...], dry_run: bool = False) -> None:
|
|
||||||
for file in files:
|
|
||||||
cmd = [
|
|
||||||
str(codecov_bin),
|
|
||||||
'--name', file.name,
|
|
||||||
'--file', str(file.path),
|
|
||||||
]
|
|
||||||
for flag in file.flags:
|
|
||||||
cmd.extend(['--flags', flag])
|
|
||||||
|
|
||||||
if dry_run:
|
|
||||||
print(f'DRY-RUN: Would run command: {cmd}')
|
|
||||||
continue
|
|
||||||
|
|
||||||
subprocess.run(cmd, check=True)
|
|
||||||
|
|
||||||
|
|
||||||
def download_file(url: str, dest: pathlib.Path, flags: int, dry_run: bool = False) -> None:
|
|
||||||
if dry_run:
|
|
||||||
print(f'DRY-RUN: Would download {url} to {dest} and set mode to {flags:o}')
|
|
||||||
return
|
|
||||||
|
|
||||||
with urllib.request.urlopen(url) as resp:
|
|
||||||
with dest.open('w+b') as f:
|
|
||||||
# Read data in chunks rather than all at once
|
|
||||||
shutil.copyfileobj(resp, f, 64 * 1024)
|
|
||||||
|
|
||||||
dest.chmod(flags)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
args = parse_args()
|
|
||||||
url = 'https://ansible-ci-files.s3.amazonaws.com/codecov/linux/codecov'
|
|
||||||
with tempfile.TemporaryDirectory(prefix='codecov-') as tmpdir:
|
|
||||||
codecov_bin = pathlib.Path(tmpdir) / 'codecov'
|
|
||||||
download_file(url, codecov_bin, 0o755, args.dry_run)
|
|
||||||
|
|
||||||
files = process_files(args.path)
|
|
||||||
upload_files(codecov_bin, files, args.dry_run)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
27
.azure-pipelines/scripts/publish-codecov.sh
Executable file
27
.azure-pipelines/scripts/publish-codecov.sh
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Upload code coverage reports to codecov.io.
|
||||||
|
# Multiple coverage files from multiple languages are accepted and aggregated after upload.
|
||||||
|
# Python coverage, as well as PowerShell and Python stubs can all be uploaded.
|
||||||
|
|
||||||
|
set -o pipefail -eu
|
||||||
|
|
||||||
|
output_path="$1"
|
||||||
|
|
||||||
|
curl --silent --show-error https://codecov.io/bash > codecov.sh
|
||||||
|
|
||||||
|
for file in "${output_path}"/reports/coverage*.xml; do
|
||||||
|
name="${file}"
|
||||||
|
name="${name##*/}" # remove path
|
||||||
|
name="${name##coverage=}" # remove 'coverage=' prefix if present
|
||||||
|
name="${name%.xml}" # remove '.xml' suffix
|
||||||
|
|
||||||
|
bash codecov.sh \
|
||||||
|
-f "${file}" \
|
||||||
|
-n "${name}" \
|
||||||
|
-X coveragepy \
|
||||||
|
-X gcov \
|
||||||
|
-X fix \
|
||||||
|
-X search \
|
||||||
|
-X xcode \
|
||||||
|
|| echo "Failed to upload code coverage report to codecov.io: ${file}"
|
||||||
|
done
|
||||||
@@ -12,4 +12,4 @@ if ! ansible-test --help >/dev/null 2>&1; then
|
|||||||
pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
|
pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ansible-test coverage xml --group-by command --stub --venv --venv-system-site-packages --color -v
|
ansible-test coverage xml --stub --venv --venv-system-site-packages --color -v
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ jobs:
|
|||||||
summaryFileLocation: "$(outputPath)/reports/$(pipelinesCoverage).xml"
|
summaryFileLocation: "$(outputPath)/reports/$(pipelinesCoverage).xml"
|
||||||
displayName: Publish to Azure Pipelines
|
displayName: Publish to Azure Pipelines
|
||||||
condition: gt(variables.coverageFileCount, 0)
|
condition: gt(variables.coverageFileCount, 0)
|
||||||
- bash: .azure-pipelines/scripts/publish-codecov.py "$(outputPath)"
|
- bash: .azure-pipelines/scripts/publish-codecov.sh "$(outputPath)"
|
||||||
displayName: Publish to codecov.io
|
displayName: Publish to codecov.io
|
||||||
condition: gt(variables.coverageFileCount, 0)
|
condition: gt(variables.coverageFileCount, 0)
|
||||||
continueOnError: true
|
continueOnError: true
|
||||||
|
|||||||
415
.github/BOTMETA.yml
vendored
415
.github/BOTMETA.yml
vendored
@@ -1,82 +1,31 @@
|
|||||||
notifications: true
|
|
||||||
automerge: true
|
automerge: true
|
||||||
files:
|
files:
|
||||||
plugins/:
|
plugins/:
|
||||||
supershipit: quidame
|
supershipit: aminvakil russoz
|
||||||
changelogs/: {}
|
|
||||||
changelogs/fragments/:
|
changelogs/fragments/:
|
||||||
support: community
|
support: community
|
||||||
$actions:
|
$actions:
|
||||||
labels: action
|
labels: action
|
||||||
$actions/system/iptables_state.py:
|
$actions/aireos.py:
|
||||||
maintainers: quidame
|
labels: aireos cisco networking
|
||||||
$actions/system/shutdown.py:
|
$actions/ironware.py:
|
||||||
|
maintainers: paulquack
|
||||||
|
labels: ironware networking
|
||||||
|
$actions/shutdown.py:
|
||||||
maintainers: nitzmahone samdoran aminvakil
|
maintainers: nitzmahone samdoran aminvakil
|
||||||
$becomes/:
|
$becomes/:
|
||||||
labels: become
|
labels: become
|
||||||
$becomes/doas.py:
|
|
||||||
maintainers: $team_ansible_core
|
|
||||||
$becomes/dzdo.py:
|
|
||||||
maintainers: $team_ansible_core
|
|
||||||
$becomes/ksu.py:
|
|
||||||
maintainers: $team_ansible_core
|
|
||||||
$becomes/machinectl.py:
|
|
||||||
maintainers: $team_ansible_core
|
|
||||||
$becomes/pbrun.py:
|
|
||||||
maintainers: $team_ansible_core
|
|
||||||
$becomes/pfexec.py:
|
|
||||||
maintainers: $team_ansible_core
|
|
||||||
$becomes/pmrun.py:
|
|
||||||
maintainers: $team_ansible_core
|
|
||||||
$becomes/sesu.py:
|
|
||||||
maintainers: nekonyuu
|
|
||||||
$becomes/sudosu.py:
|
|
||||||
maintainers: dagwieers
|
|
||||||
$caches/:
|
|
||||||
labels: cache
|
|
||||||
$caches/memcached.py: {}
|
|
||||||
$caches/pickle.py:
|
|
||||||
maintainers: bcoca
|
|
||||||
$caches/redis.py: {}
|
|
||||||
$caches/yaml.py:
|
|
||||||
maintainers: bcoca
|
|
||||||
$callbacks/:
|
$callbacks/:
|
||||||
labels: callbacks
|
labels: callbacks
|
||||||
$callbacks/cgroup_memory_recap.py: {}
|
|
||||||
$callbacks/context_demo.py: {}
|
|
||||||
$callbacks/counter_enabled.py: {}
|
|
||||||
$callbacks/dense.py:
|
|
||||||
maintainers: dagwieers
|
|
||||||
$callbacks/diy.py:
|
|
||||||
maintainers: theque5t
|
|
||||||
$callbacks/elastic.py:
|
|
||||||
maintainers: v1v
|
|
||||||
keywords: apm observability
|
|
||||||
$callbacks/hipchat.py: {}
|
|
||||||
$callbacks/jabber.py: {}
|
|
||||||
$callbacks/loganalytics.py:
|
$callbacks/loganalytics.py:
|
||||||
maintainers: zhcli
|
maintainers: zhcli
|
||||||
$callbacks/logdna.py: {}
|
|
||||||
$callbacks/logentries.py: {}
|
|
||||||
$callbacks/log_plays.py: {}
|
|
||||||
$callbacks/logstash.py:
|
$callbacks/logstash.py:
|
||||||
maintainers: ujenmr
|
maintainers: ujenmr
|
||||||
$callbacks/mail.py:
|
|
||||||
maintainers: dagwieers
|
|
||||||
$callbacks/nrdp.py:
|
|
||||||
maintainers: rverchere
|
|
||||||
$callbacks/null.py: {}
|
|
||||||
$callbacks/opentelemetry.py:
|
|
||||||
maintainers: v1v
|
|
||||||
keywords: opentelemetry observability
|
|
||||||
$callbacks/say.py:
|
$callbacks/say.py:
|
||||||
notify: chris-short
|
notify: chris-short
|
||||||
maintainers: $team_macos
|
maintainers: $team_macos
|
||||||
labels: macos say
|
labels: macos say
|
||||||
keywords: brew cask darwin homebrew macosx macports osx
|
keywords: brew cask darwin homebrew macosx macports osx
|
||||||
$callbacks/selective.py: {}
|
|
||||||
$callbacks/slack.py: {}
|
|
||||||
$callbacks/splunk.py: {}
|
|
||||||
$callbacks/sumologic.py:
|
$callbacks/sumologic.py:
|
||||||
maintainers: ryancurrah
|
maintainers: ryancurrah
|
||||||
labels: sumologic
|
labels: sumologic
|
||||||
@@ -85,26 +34,16 @@ files:
|
|||||||
$callbacks/unixy.py:
|
$callbacks/unixy.py:
|
||||||
maintainers: akatch
|
maintainers: akatch
|
||||||
labels: unixy
|
labels: unixy
|
||||||
$callbacks/yaml.py: {}
|
|
||||||
$connections/:
|
$connections/:
|
||||||
labels: connections
|
labels: connections
|
||||||
$connections/chroot.py: {}
|
$connections/kubectl.py:
|
||||||
$connections/funcd.py:
|
maintainers: chouseknecht fabianvf flaper87 maxamillion
|
||||||
maintainers: mscherer
|
labels: k8s kubectl
|
||||||
$connections/iocage.py: {}
|
|
||||||
$connections/jail.py:
|
|
||||||
maintainers: $team_ansible_core
|
|
||||||
$connections/lxc.py: {}
|
|
||||||
$connections/lxd.py:
|
$connections/lxd.py:
|
||||||
maintainers: mattclay
|
maintainers: mattclay
|
||||||
labels: lxd
|
labels: lxd
|
||||||
$connections/qubes.py:
|
|
||||||
maintainers: kushaldas
|
|
||||||
$connections/saltstack.py:
|
$connections/saltstack.py:
|
||||||
maintainers: mscherer
|
|
||||||
labels: saltstack
|
labels: saltstack
|
||||||
$connections/zone.py:
|
|
||||||
maintainers: $team_ansible_core
|
|
||||||
$doc_fragments/:
|
$doc_fragments/:
|
||||||
labels: docs_fragments
|
labels: docs_fragments
|
||||||
$doc_fragments/hpe3par.py:
|
$doc_fragments/hpe3par.py:
|
||||||
@@ -124,108 +63,61 @@ files:
|
|||||||
maintainers: giner
|
maintainers: giner
|
||||||
$filters/from_csv.py:
|
$filters/from_csv.py:
|
||||||
maintainers: Ajpantuso
|
maintainers: Ajpantuso
|
||||||
$filters/groupby:
|
|
||||||
maintainers: felixfontein
|
|
||||||
$filters/hashids:
|
$filters/hashids:
|
||||||
maintainers: Ajpantuso
|
maintainers: Ajpantuso
|
||||||
$filters/jc.py:
|
$filters/jc.py:
|
||||||
maintainers: kellyjonbrazil
|
maintainers: kellyjonbrazil
|
||||||
$filters/json_query.py: {}
|
|
||||||
$filters/list.py:
|
$filters/list.py:
|
||||||
maintainers: vbotka
|
maintainers: vbotka
|
||||||
$filters/path_join_shim.py:
|
$filters/path_join_shim.py:
|
||||||
maintainers: felixfontein
|
maintainers: felixfontein
|
||||||
$filters/random_mac.py: {}
|
|
||||||
$filters/time.py:
|
$filters/time.py:
|
||||||
maintainers: resmo
|
maintainers: resmo
|
||||||
$filters/unicode_normalize.py:
|
|
||||||
maintainers: Ajpantuso
|
|
||||||
$filters/version_sort.py:
|
$filters/version_sort.py:
|
||||||
maintainers: ericzolf
|
maintainers: ericzolf
|
||||||
|
$httpapis/:
|
||||||
|
maintainers: $team_networking
|
||||||
|
labels: networking
|
||||||
|
$httpapis/ftd.py:
|
||||||
|
maintainers: $team_networking annikulin
|
||||||
|
labels: cisco ftd networking
|
||||||
|
keywords: firepower ftd
|
||||||
$inventories/:
|
$inventories/:
|
||||||
labels: inventories
|
labels: inventories
|
||||||
$inventories/cobbler.py:
|
|
||||||
maintainers: opoplawski
|
|
||||||
$inventories/gitlab_runners.py:
|
|
||||||
maintainers: morph027
|
|
||||||
$inventories/linode.py:
|
$inventories/linode.py:
|
||||||
maintainers: $team_linode
|
maintainers: $team_linode
|
||||||
labels: cloud linode
|
labels: cloud linode
|
||||||
keywords: linode dynamic inventory script
|
keywords: linode dynamic inventory script
|
||||||
$inventories/lxd.py:
|
|
||||||
maintainers: conloos
|
|
||||||
$inventories/nmap.py: {}
|
|
||||||
$inventories/online.py:
|
|
||||||
maintainers: sieben
|
|
||||||
$inventories/opennebula.py:
|
|
||||||
maintainers: feldsam
|
|
||||||
labels: cloud opennebula
|
|
||||||
keywords: opennebula dynamic inventory script
|
|
||||||
$inventories/proxmox.py:
|
$inventories/proxmox.py:
|
||||||
maintainers: $team_virt ilijamt
|
maintainers: $team_virt ilijamt
|
||||||
$inventories/icinga2.py:
|
|
||||||
maintainers: bongoeadgc6
|
|
||||||
$inventories/scaleway.py:
|
$inventories/scaleway.py:
|
||||||
maintainers: $team_scaleway
|
maintainers: $team_scaleway
|
||||||
labels: cloud scaleway
|
labels: cloud scaleway
|
||||||
$inventories/stackpath_compute.py:
|
|
||||||
maintainers: shayrybak
|
|
||||||
$inventories/virtualbox.py: {}
|
|
||||||
$lookups/:
|
$lookups/:
|
||||||
labels: lookups
|
labels: lookups
|
||||||
$lookups/cartesian.py: {}
|
|
||||||
$lookups/chef_databag.py: {}
|
|
||||||
$lookups/collection_version.py:
|
|
||||||
maintainers: felixfontein
|
|
||||||
$lookups/consul_kv.py: {}
|
|
||||||
$lookups/credstash.py: {}
|
|
||||||
$lookups/cyberarkpassword.py:
|
|
||||||
notify: cyberark-bizdev
|
|
||||||
labels: cyberarkpassword
|
|
||||||
$lookups/dependent.py:
|
|
||||||
maintainers: felixfontein
|
|
||||||
$lookups/dig.py:
|
|
||||||
maintainers: jpmens
|
|
||||||
labels: dig
|
|
||||||
$lookups/dnstxt.py:
|
|
||||||
maintainers: jpmens
|
|
||||||
$lookups/dsv.py:
|
|
||||||
maintainers: amigus endlesstrax
|
|
||||||
$lookups/etcd3.py:
|
|
||||||
maintainers: eric-belhomme
|
|
||||||
$lookups/etcd.py:
|
|
||||||
maintainers: jpmens
|
|
||||||
$lookups/filetree.py:
|
|
||||||
maintainers: dagwieers
|
|
||||||
$lookups/flattened.py: {}
|
|
||||||
$lookups/hiera.py:
|
|
||||||
maintainers: jparrill
|
|
||||||
$lookups/keyring.py: {}
|
|
||||||
$lookups/lastpass.py: {}
|
|
||||||
$lookups/lmdb_kv.py:
|
|
||||||
maintainers: jpmens
|
|
||||||
$lookups/manifold.py:
|
|
||||||
maintainers: galanoff
|
|
||||||
labels: manifold
|
|
||||||
$lookups/onepass:
|
$lookups/onepass:
|
||||||
maintainers: samdoran
|
maintainers: samdoran
|
||||||
labels: onepassword
|
labels: onepassword
|
||||||
$lookups/onepassword.py:
|
$lookups/conjur_variable.py:
|
||||||
maintainers: azenk scottsb
|
notify: cyberark-bizdev
|
||||||
$lookups/onepassword_raw.py:
|
maintainers: $team_cyberark_conjur
|
||||||
maintainers: azenk scottsb
|
labels: conjur_variable
|
||||||
$lookups/passwordstore.py: {}
|
$lookups/cyberarkpassword.py:
|
||||||
$lookups/random_pet.py:
|
notify: cyberark-bizdev
|
||||||
maintainers: Akasurde
|
labels: cyberarkpassword
|
||||||
$lookups/random_string.py:
|
$lookups/dig.py:
|
||||||
maintainers: Akasurde
|
maintainers: jpmens
|
||||||
$lookups/random_words.py:
|
labels: dig
|
||||||
maintainers: konstruktoid
|
|
||||||
$lookups/redis.py:
|
|
||||||
maintainers: $team_ansible_core jpmens
|
|
||||||
$lookups/shelvefile.py: {}
|
|
||||||
$lookups/tss.py:
|
$lookups/tss.py:
|
||||||
maintainers: amigus endlesstrax
|
maintainers: amigus
|
||||||
|
$lookups/dsv.py:
|
||||||
|
maintainers: amigus
|
||||||
|
$lookups/manifold.py:
|
||||||
|
maintainers: galanoff
|
||||||
|
labels: manifold
|
||||||
|
$lookups/nios:
|
||||||
|
maintainers: $team_networking sganesh-infoblox
|
||||||
|
labels: infoblox networking
|
||||||
$module_utils/:
|
$module_utils/:
|
||||||
labels: module_utils
|
labels: module_utils
|
||||||
$module_utils/gitlab.py:
|
$module_utils/gitlab.py:
|
||||||
@@ -248,12 +140,12 @@ files:
|
|||||||
$module_utils/memset.py:
|
$module_utils/memset.py:
|
||||||
maintainers: glitchcrab
|
maintainers: glitchcrab
|
||||||
labels: cloud memset
|
labels: cloud memset
|
||||||
$module_utils/mh/:
|
|
||||||
maintainers: russoz
|
|
||||||
labels: module_helper
|
|
||||||
$module_utils/module_helper.py:
|
$module_utils/module_helper.py:
|
||||||
maintainers: russoz
|
maintainers: russoz
|
||||||
labels: module_helper
|
labels: module_helper
|
||||||
|
$module_utils/net_tools/nios/api.py:
|
||||||
|
maintainers: $team_networking sganesh-infoblox
|
||||||
|
labels: infoblox networking
|
||||||
$module_utils/oracle/oci_utils.py:
|
$module_utils/oracle/oci_utils.py:
|
||||||
maintainers: $team_oracle
|
maintainers: $team_oracle
|
||||||
labels: cloud
|
labels: cloud
|
||||||
@@ -263,13 +155,11 @@ files:
|
|||||||
$module_utils/redfish_utils.py:
|
$module_utils/redfish_utils.py:
|
||||||
maintainers: $team_redfish
|
maintainers: $team_redfish
|
||||||
labels: redfish_utils
|
labels: redfish_utils
|
||||||
$module_utils/remote_management/lxca/common.py:
|
$module_utils/remote_management/lxca/common.py: navalkp prabhosa
|
||||||
maintainers: navalkp prabhosa
|
|
||||||
$module_utils/scaleway.py:
|
$module_utils/scaleway.py:
|
||||||
maintainers: $team_scaleway
|
maintainers: $team_scaleway
|
||||||
labels: cloud scaleway
|
labels: cloud scaleway
|
||||||
$module_utils/storage/hpe3par/hpe3par.py:
|
$module_utils/storage/hpe3par/hpe3par.py: farhan7500 gautamphegde
|
||||||
maintainers: farhan7500 gautamphegde
|
|
||||||
$module_utils/utm_utils.py:
|
$module_utils/utm_utils.py:
|
||||||
maintainers: $team_e_spirit
|
maintainers: $team_e_spirit
|
||||||
labels: utm_utils
|
labels: utm_utils
|
||||||
@@ -300,27 +190,33 @@ files:
|
|||||||
maintainers: zbal
|
maintainers: zbal
|
||||||
$modules/cloud/lxc/lxc_container.py:
|
$modules/cloud/lxc/lxc_container.py:
|
||||||
maintainers: cloudnull
|
maintainers: cloudnull
|
||||||
|
$modules/cloud/lxc/lxc_profile.py:
|
||||||
|
maintainers: conloos
|
||||||
$modules/cloud/lxd/:
|
$modules/cloud/lxd/:
|
||||||
ignore: hnakamur
|
ignore: hnakamur
|
||||||
$modules/cloud/lxd/lxd_profile.py:
|
|
||||||
maintainers: conloos
|
|
||||||
$modules/cloud/memset/:
|
$modules/cloud/memset/:
|
||||||
maintainers: glitchcrab
|
maintainers: glitchcrab
|
||||||
$modules/cloud/misc/cloud_init_data_facts.py:
|
$modules/cloud/misc/cloud_init_data_facts.py:
|
||||||
maintainers: resmo
|
maintainers: resmo
|
||||||
$modules/cloud/misc/proxmox:
|
$modules/cloud/misc/proxmox.py:
|
||||||
|
maintainers: $team_virt UnderGreen
|
||||||
|
labels: proxmox virt
|
||||||
|
ignore: skvidal
|
||||||
|
keywords: kvm libvirt proxmox qemu
|
||||||
|
$modules/cloud/misc/proxmox_kvm.py:
|
||||||
|
maintainers: $team_virt helldorado
|
||||||
|
labels: proxmox_kvm virt
|
||||||
|
ignore: skvidal
|
||||||
|
keywords: kvm libvirt proxmox qemu
|
||||||
|
$modules/cloud/misc/proxmox_snap.py:
|
||||||
maintainers: $team_virt
|
maintainers: $team_virt
|
||||||
labels: proxmox virt
|
labels: proxmox virt
|
||||||
keywords: kvm libvirt proxmox qemu
|
keywords: kvm libvirt proxmox qemu
|
||||||
$modules/cloud/misc/proxmox.py:
|
|
||||||
maintainers: UnderGreen
|
|
||||||
ignore: skvidal
|
|
||||||
$modules/cloud/misc/proxmox_kvm.py:
|
|
||||||
maintainers: helldorado
|
|
||||||
ignore: skvidal
|
|
||||||
$modules/cloud/misc/proxmox_template.py:
|
$modules/cloud/misc/proxmox_template.py:
|
||||||
maintainers: UnderGreen
|
maintainers: $team_virt UnderGreen
|
||||||
|
labels: proxmox_template virt
|
||||||
ignore: skvidal
|
ignore: skvidal
|
||||||
|
keywords: kvm libvirt proxmox qemu
|
||||||
$modules/cloud/misc/rhevm.py:
|
$modules/cloud/misc/rhevm.py:
|
||||||
maintainers: $team_virt TimothyVandenbrande
|
maintainers: $team_virt TimothyVandenbrande
|
||||||
labels: rhevm virt
|
labels: rhevm virt
|
||||||
@@ -329,7 +225,7 @@ files:
|
|||||||
$modules/cloud/misc/:
|
$modules/cloud/misc/:
|
||||||
ignore: ryansb
|
ignore: ryansb
|
||||||
$modules/cloud/misc/terraform.py:
|
$modules/cloud/misc/terraform.py:
|
||||||
maintainers: m-yosefpor rainerleber
|
maintainers: m-yosefpor
|
||||||
$modules/cloud/misc/xenserver_facts.py:
|
$modules/cloud/misc/xenserver_facts.py:
|
||||||
maintainers: caphrim007 cheese
|
maintainers: caphrim007 cheese
|
||||||
labels: xenserver_facts
|
labels: xenserver_facts
|
||||||
@@ -362,40 +258,16 @@ files:
|
|||||||
maintainers: omgjlk sivel
|
maintainers: omgjlk sivel
|
||||||
$modules/cloud/rackspace/:
|
$modules/cloud/rackspace/:
|
||||||
ignore: ryansb sivel
|
ignore: ryansb sivel
|
||||||
$modules/cloud/rackspace/rax_cbs.py:
|
|
||||||
maintainers: claco
|
|
||||||
$modules/cloud/rackspace/rax_cbs_attachments.py:
|
|
||||||
maintainers: claco
|
|
||||||
$modules/cloud/rackspace/rax_cdb.py:
|
|
||||||
maintainers: jails
|
|
||||||
$modules/cloud/rackspace/rax_cdb_user.py:
|
|
||||||
maintainers: jails
|
|
||||||
$modules/cloud/rackspace/rax_cdb_database.py:
|
|
||||||
maintainers: jails
|
|
||||||
$modules/cloud/rackspace/rax_clb.py:
|
$modules/cloud/rackspace/rax_clb.py:
|
||||||
maintainers: claco
|
maintainers: claco
|
||||||
$modules/cloud/rackspace/rax_clb_nodes.py:
|
$modules/cloud/rackspace/rax_clb_nodes.py:
|
||||||
maintainers: neuroid
|
maintainers: neuroid
|
||||||
$modules/cloud/rackspace/rax_clb_ssl.py:
|
$modules/cloud/rackspace/rax_clb_ssl.py:
|
||||||
maintainers: smashwilson
|
maintainers: smashwilson
|
||||||
$modules/cloud/rackspace/rax_files.py:
|
|
||||||
maintainers: angstwad
|
|
||||||
$modules/cloud/rackspace/rax_files_objects.py:
|
|
||||||
maintainers: angstwad
|
|
||||||
$modules/cloud/rackspace/rax_identity.py:
|
$modules/cloud/rackspace/rax_identity.py:
|
||||||
maintainers: claco
|
maintainers: claco
|
||||||
$modules/cloud/rackspace/rax_network.py:
|
$modules/cloud/rackspace/rax_network.py:
|
||||||
maintainers: claco omgjlk
|
maintainers: claco omgjlk
|
||||||
$modules/cloud/rackspace/rax_mon_alarm.py:
|
|
||||||
maintainers: smashwilson
|
|
||||||
$modules/cloud/rackspace/rax_mon_check.py:
|
|
||||||
maintainers: smashwilson
|
|
||||||
$modules/cloud/rackspace/rax_mon_entity.py:
|
|
||||||
maintainers: smashwilson
|
|
||||||
$modules/cloud/rackspace/rax_mon_notification.py:
|
|
||||||
maintainers: smashwilson
|
|
||||||
$modules/cloud/rackspace/rax_mon_notification_plan.py:
|
|
||||||
maintainers: smashwilson
|
|
||||||
$modules/cloud/rackspace/rax_queue.py:
|
$modules/cloud/rackspace/rax_queue.py:
|
||||||
maintainers: claco
|
maintainers: claco
|
||||||
$modules/cloud/scaleway/:
|
$modules/cloud/scaleway/:
|
||||||
@@ -407,17 +279,13 @@ files:
|
|||||||
$modules/cloud/scaleway/scaleway_ip_info.py:
|
$modules/cloud/scaleway/scaleway_ip_info.py:
|
||||||
maintainers: Spredzy
|
maintainers: Spredzy
|
||||||
$modules/cloud/scaleway/scaleway_organization_info.py:
|
$modules/cloud/scaleway/scaleway_organization_info.py:
|
||||||
maintainers: sieben Spredzy
|
maintainers: sieben
|
||||||
$modules/cloud/scaleway/scaleway_security_group.py:
|
$modules/cloud/scaleway/scaleway_security_group.py:
|
||||||
maintainers: DenBeke
|
maintainers: DenBeke
|
||||||
$modules/cloud/scaleway/scaleway_security_group_info.py:
|
$modules/cloud/scaleway/scaleway_security_group_info.py:
|
||||||
maintainers: sieben Spredzy
|
maintainers: sieben
|
||||||
$modules/cloud/scaleway/scaleway_security_group_rule.py:
|
$modules/cloud/scaleway/scaleway_security_group_rule.py:
|
||||||
maintainers: DenBeke
|
maintainers: DenBeke
|
||||||
$modules/cloud/scaleway/scaleway_server_info.py:
|
|
||||||
maintainers: Spredzy
|
|
||||||
$modules/cloud/scaleway/scaleway_snapshot_info.py:
|
|
||||||
maintainers: Spredzy
|
|
||||||
$modules/cloud/scaleway/scaleway_volume.py:
|
$modules/cloud/scaleway/scaleway_volume.py:
|
||||||
labels: scaleway_volume
|
labels: scaleway_volume
|
||||||
ignore: hekonsek
|
ignore: hekonsek
|
||||||
@@ -469,24 +337,11 @@ files:
|
|||||||
maintainers: john-westcott-iv
|
maintainers: john-westcott-iv
|
||||||
$modules/database/misc/redis.py:
|
$modules/database/misc/redis.py:
|
||||||
maintainers: slok
|
maintainers: slok
|
||||||
$modules/database/misc/redis_info.py:
|
|
||||||
maintainers: levonet
|
|
||||||
$modules/database/misc/redis_data_info.py:
|
|
||||||
maintainers: paginabianca
|
|
||||||
$modules/database/misc/redis_data.py:
|
|
||||||
maintainers: paginabianca
|
|
||||||
$modules/database/misc/redis_data_incr.py:
|
|
||||||
maintainers: paginabianca
|
|
||||||
$modules/database/misc/riak.py:
|
$modules/database/misc/riak.py:
|
||||||
maintainers: drewkerrigan jsmartin
|
maintainers: drewkerrigan jsmartin
|
||||||
$modules/database/mssql/mssql_db.py:
|
$modules/database/mssql/mssql_db.py:
|
||||||
maintainers: vedit Jmainguy kenichi-ogawa-1988
|
maintainers: vedit Jmainguy kenichi-ogawa-1988
|
||||||
labels: mssql_db
|
labels: mssql_db
|
||||||
$modules/database/mssql/mssql_script.py:
|
|
||||||
maintainers: kbudde
|
|
||||||
labels: mssql_script
|
|
||||||
$modules/database/saphana/hana_query.py:
|
|
||||||
maintainers: rainerleber
|
|
||||||
$modules/database/vertica/:
|
$modules/database/vertica/:
|
||||||
maintainers: dareko
|
maintainers: dareko
|
||||||
$modules/files/archive.py:
|
$modules/files/archive.py:
|
||||||
@@ -495,14 +350,10 @@ files:
|
|||||||
maintainers: quidame
|
maintainers: quidame
|
||||||
$modules/files/ini_file.py:
|
$modules/files/ini_file.py:
|
||||||
maintainers: jpmens noseka1
|
maintainers: jpmens noseka1
|
||||||
$modules/files/iso_create.py:
|
|
||||||
maintainers: Tomorrow9
|
|
||||||
$modules/files/iso_extract.py:
|
$modules/files/iso_extract.py:
|
||||||
maintainers: dagwieers jhoekx ribbons
|
maintainers: dagwieers jhoekx ribbons
|
||||||
$modules/files/read_csv.py:
|
$modules/files/read_csv.py:
|
||||||
maintainers: dagwieers
|
maintainers: dagwieers
|
||||||
$modules/files/sapcar_extract.py:
|
|
||||||
maintainers: RainerLeber
|
|
||||||
$modules/files/xattr.py:
|
$modules/files/xattr.py:
|
||||||
maintainers: bcoca
|
maintainers: bcoca
|
||||||
labels: xattr
|
labels: xattr
|
||||||
@@ -520,28 +371,13 @@ files:
|
|||||||
maintainers: jparrill
|
maintainers: jparrill
|
||||||
$modules/identity/keycloak/:
|
$modules/identity/keycloak/:
|
||||||
maintainers: $team_keycloak
|
maintainers: $team_keycloak
|
||||||
$modules/identity/keycloak/keycloak_authentication.py:
|
|
||||||
maintainers: elfelip Gaetan2907
|
|
||||||
$modules/identity/keycloak/keycloak_clientscope.py:
|
|
||||||
maintainers: Gaetan2907
|
|
||||||
$modules/identity/keycloak/keycloak_client_rolemapping.py:
|
|
||||||
maintainers: Gaetan2907
|
|
||||||
$modules/identity/keycloak/keycloak_group.py:
|
$modules/identity/keycloak/keycloak_group.py:
|
||||||
maintainers: adamgoossens
|
maintainers: adamgoossens
|
||||||
$modules/identity/keycloak/keycloak_identity_provider.py:
|
|
||||||
maintainers: laurpaum
|
|
||||||
$modules/identity/keycloak/keycloak_realm.py:
|
|
||||||
maintainers: kris2kris
|
|
||||||
$modules/identity/keycloak/keycloak_role.py:
|
|
||||||
maintainers: laurpaum
|
|
||||||
$modules/identity/keycloak/keycloak_user_federation.py:
|
|
||||||
maintainers: laurpaum
|
|
||||||
$modules/identity/onepassword_info.py:
|
$modules/identity/onepassword_info.py:
|
||||||
maintainers: Rylon
|
maintainers: Rylon
|
||||||
$modules/identity/opendj/opendj_backendprop.py:
|
$modules/identity/opendj/opendj_backendprop.py:
|
||||||
maintainers: dj-wasabi
|
maintainers: dj-wasabi
|
||||||
$modules/monitoring/airbrake_deployment.py:
|
$modules/monitoring/airbrake_deployment.py:
|
||||||
maintainers: phumpal
|
|
||||||
labels: airbrake_deployment
|
labels: airbrake_deployment
|
||||||
ignore: bpennypacker
|
ignore: bpennypacker
|
||||||
$modules/monitoring/bigpanda.py:
|
$modules/monitoring/bigpanda.py:
|
||||||
@@ -552,8 +388,6 @@ files:
|
|||||||
maintainers: n0ts
|
maintainers: n0ts
|
||||||
labels: datadog_event
|
labels: datadog_event
|
||||||
ignore: arturaz
|
ignore: arturaz
|
||||||
$modules/monitoring/datadog/datadog_downtime.py:
|
|
||||||
maintainers: Datadog
|
|
||||||
$modules/monitoring/datadog/datadog_monitor.py:
|
$modules/monitoring/datadog/datadog_monitor.py:
|
||||||
maintainers: skornehl
|
maintainers: skornehl
|
||||||
$modules/monitoring/honeybadger_deployment.py:
|
$modules/monitoring/honeybadger_deployment.py:
|
||||||
@@ -617,10 +451,10 @@ files:
|
|||||||
maintainers: drcapulet
|
maintainers: drcapulet
|
||||||
$modules/net_tools/dnsmadeeasy.py:
|
$modules/net_tools/dnsmadeeasy.py:
|
||||||
maintainers: briceburg
|
maintainers: briceburg
|
||||||
$modules/net_tools/gandi_livedns.py:
|
|
||||||
maintainers: gthiemonge
|
|
||||||
$modules/net_tools/haproxy.py:
|
$modules/net_tools/haproxy.py:
|
||||||
maintainers: ravibhure Normo
|
maintainers: ravibhure Normo
|
||||||
|
$modules/net_tools/:
|
||||||
|
maintainers: nerzhul
|
||||||
$modules/net_tools/infinity/infinity.py:
|
$modules/net_tools/infinity/infinity.py:
|
||||||
maintainers: MeganLiu
|
maintainers: MeganLiu
|
||||||
$modules/net_tools/ip_netns.py:
|
$modules/net_tools/ip_netns.py:
|
||||||
@@ -644,26 +478,37 @@ files:
|
|||||||
ignore: andyhky
|
ignore: andyhky
|
||||||
$modules/net_tools/netcup_dns.py:
|
$modules/net_tools/netcup_dns.py:
|
||||||
maintainers: nbuchwitz
|
maintainers: nbuchwitz
|
||||||
$modules/net_tools/nsupdate.py:
|
|
||||||
maintainers: nerzhul
|
|
||||||
$modules/net_tools/omapi_host.py:
|
$modules/net_tools/omapi_host.py:
|
||||||
maintainers: amasolov nerzhul
|
maintainers: amasolov
|
||||||
$modules/net_tools/pritunl/:
|
$modules/net_tools/nios/:
|
||||||
maintainers: Lowess
|
maintainers: $team_networking
|
||||||
|
labels: infoblox networking
|
||||||
|
$modules/net_tools/nios/nios_fixed_address.py:
|
||||||
|
maintainers: sjaiswal
|
||||||
|
$modules/net_tools/nios/nios_nsgroup.py:
|
||||||
|
maintainers: ebirn sjaiswal
|
||||||
|
$modules/net_tools/nios/nios_ptr_record.py:
|
||||||
|
maintainers: clementtrebuchet
|
||||||
|
$modules/net_tools/nios/nios_srv_record.py:
|
||||||
|
maintainers: brampling
|
||||||
|
$modules/net_tools/nios/nios_txt_record.py:
|
||||||
|
maintainers: coreywan
|
||||||
$modules/net_tools/nmcli.py:
|
$modules/net_tools/nmcli.py:
|
||||||
maintainers: alcamie101
|
maintainers: alcamie101
|
||||||
$modules/net_tools/snmp_facts.py:
|
$modules/net_tools/snmp_facts.py:
|
||||||
maintainers: ogenstad ujwalkomarla
|
maintainers: ogenstad ujwalkomarla
|
||||||
|
$modules/notification/osx_say.py:
|
||||||
|
maintainers: ansible mpdehaan
|
||||||
|
labels: _osx_say
|
||||||
|
deprecated: true
|
||||||
$modules/notification/bearychat.py:
|
$modules/notification/bearychat.py:
|
||||||
maintainers: tonyseek
|
maintainers: tonyseek
|
||||||
$modules/notification/campfire.py:
|
$modules/notification/campfire.py:
|
||||||
maintainers: fabulops
|
maintainers: fabulops
|
||||||
$modules/notification/catapult.py:
|
$modules/notification/catapult.py:
|
||||||
maintainers: Jmainguy
|
maintainers: Jmainguy
|
||||||
$modules/notification/cisco_webex.py:
|
$modules/notification/cisco_spark.py:
|
||||||
maintainers: drew-russell
|
maintainers: drew-russell
|
||||||
$modules/notification/discord.py:
|
|
||||||
maintainers: cwollinger
|
|
||||||
$modules/notification/flowdock.py:
|
$modules/notification/flowdock.py:
|
||||||
maintainers: mcodd
|
maintainers: mcodd
|
||||||
$modules/notification/grove.py:
|
$modules/notification/grove.py:
|
||||||
@@ -691,13 +536,13 @@ files:
|
|||||||
$modules/notification/pushbullet.py:
|
$modules/notification/pushbullet.py:
|
||||||
maintainers: willybarro
|
maintainers: willybarro
|
||||||
$modules/notification/pushover.py:
|
$modules/notification/pushover.py:
|
||||||
maintainers: weaselkeeper wopfel
|
maintainers: weaselkeeper
|
||||||
$modules/notification/rocketchat.py:
|
$modules/notification/rocketchat.py:
|
||||||
maintainers: Deepakkothandan
|
maintainers: Deepakkothandan
|
||||||
labels: rocketchat
|
labels: rocketchat
|
||||||
ignore: ramondelafuente
|
ignore: ramondelafuente
|
||||||
$modules/notification/say.py:
|
$modules/notification/say.py:
|
||||||
maintainers: $team_ansible_core mpdehaan
|
maintainers: ansible mpdehaan
|
||||||
$modules/notification/sendgrid.py:
|
$modules/notification/sendgrid.py:
|
||||||
maintainers: makaimc
|
maintainers: makaimc
|
||||||
$modules/notification/slack.py:
|
$modules/notification/slack.py:
|
||||||
@@ -705,26 +550,23 @@ files:
|
|||||||
$modules/notification/syslogger.py:
|
$modules/notification/syslogger.py:
|
||||||
maintainers: garbled1
|
maintainers: garbled1
|
||||||
$modules/notification/telegram.py:
|
$modules/notification/telegram.py:
|
||||||
maintainers: tyouxa loms lomserman
|
maintainers: tyouxa loms
|
||||||
$modules/notification/twilio.py:
|
$modules/notification/twilio.py:
|
||||||
maintainers: makaimc
|
maintainers: makaimc
|
||||||
$modules/notification/typetalk.py:
|
$modules/notification/typetalk.py:
|
||||||
maintainers: tksmd
|
maintainers: tksmd
|
||||||
$modules/packaging/language/ansible_galaxy_install.py:
|
|
||||||
maintainers: russoz
|
|
||||||
$modules/packaging/language/bower.py:
|
$modules/packaging/language/bower.py:
|
||||||
maintainers: mwarkentin
|
maintainers: mwarkentin
|
||||||
$modules/packaging/language/bundler.py:
|
$modules/packaging/language/bundler.py:
|
||||||
maintainers: thoiberg
|
maintainers: thoiberg
|
||||||
$modules/packaging/language/composer.py:
|
$modules/packaging/language/composer.py:
|
||||||
maintainers: dmtrs
|
maintainers: dmtrs resmo
|
||||||
ignore: resmo
|
|
||||||
$modules/packaging/language/cpanm.py:
|
$modules/packaging/language/cpanm.py:
|
||||||
maintainers: fcuny russoz
|
maintainers: fcuny russoz
|
||||||
$modules/packaging/language/easy_install.py:
|
$modules/packaging/language/easy_install.py:
|
||||||
maintainers: mattupstate
|
maintainers: mattupstate
|
||||||
$modules/packaging/language/gem.py:
|
$modules/packaging/language/gem.py:
|
||||||
maintainers: $team_ansible_core johanwiren
|
maintainers: ansible johanwiren
|
||||||
labels: gem
|
labels: gem
|
||||||
$modules/packaging/language/maven_artifact.py:
|
$modules/packaging/language/maven_artifact.py:
|
||||||
maintainers: tumbl3w33d turb
|
maintainers: tumbl3w33d turb
|
||||||
@@ -739,22 +581,16 @@ files:
|
|||||||
ignore: jle64
|
ignore: jle64
|
||||||
$modules/packaging/language/pip_package_info.py:
|
$modules/packaging/language/pip_package_info.py:
|
||||||
maintainers: bcoca matburt maxamillion
|
maintainers: bcoca matburt maxamillion
|
||||||
$modules/packaging/language/pipx.py:
|
|
||||||
maintainers: russoz
|
|
||||||
$modules/packaging/language/yarn.py:
|
$modules/packaging/language/yarn.py:
|
||||||
maintainers: chrishoffman verkaufer
|
maintainers: chrishoffman verkaufer
|
||||||
$modules/packaging/os/apk.py:
|
$modules/packaging/os/apk.py:
|
||||||
maintainers: tdtrask
|
maintainers: tdtrask
|
||||||
labels: apk
|
labels: apk
|
||||||
ignore: kbrebanov
|
ignore: kbrebanov
|
||||||
$modules/packaging/os/apt_repo.py:
|
|
||||||
maintainers: obirvalger
|
|
||||||
$modules/packaging/os/apt_rpm.py:
|
$modules/packaging/os/apt_rpm.py:
|
||||||
maintainers: evgkrsk
|
maintainers: evgkrsk
|
||||||
$modules/packaging/os/copr.py:
|
$modules/packaging/os/copr.py:
|
||||||
maintainers: schlupov
|
maintainers: schlupov
|
||||||
$modules/packaging/os/dnf_versionlock.py:
|
|
||||||
maintainers: moreda
|
|
||||||
$modules/packaging/os/flatpak.py:
|
$modules/packaging/os/flatpak.py:
|
||||||
maintainers: $team_flatpak
|
maintainers: $team_flatpak
|
||||||
$modules/packaging/os/flatpak_remote.py:
|
$modules/packaging/os/flatpak_remote.py:
|
||||||
@@ -806,9 +642,6 @@ files:
|
|||||||
maintainers: elasticdog indrajitr tchernomax
|
maintainers: elasticdog indrajitr tchernomax
|
||||||
labels: pacman
|
labels: pacman
|
||||||
ignore: elasticdog
|
ignore: elasticdog
|
||||||
$modules/packaging/os/pacman_key.py:
|
|
||||||
maintainers: grawlinson
|
|
||||||
labels: pacman
|
|
||||||
$modules/packaging/os/pkgin.py:
|
$modules/packaging/os/pkgin.py:
|
||||||
maintainers: $team_solaris L2G jasperla szinck martinm82
|
maintainers: $team_solaris L2G jasperla szinck martinm82
|
||||||
labels: pkgin solaris
|
labels: pkgin solaris
|
||||||
@@ -851,9 +684,6 @@ files:
|
|||||||
$modules/packaging/os/snap.py:
|
$modules/packaging/os/snap.py:
|
||||||
maintainers: angristan vcarceler
|
maintainers: angristan vcarceler
|
||||||
labels: snap
|
labels: snap
|
||||||
$modules/packaging/os/snap_alias.py:
|
|
||||||
maintainers: russoz
|
|
||||||
labels: snap
|
|
||||||
$modules/packaging/os/sorcery.py:
|
$modules/packaging/os/sorcery.py:
|
||||||
maintainers: vaygr
|
maintainers: vaygr
|
||||||
$modules/packaging/os/svr4pkg.py:
|
$modules/packaging/os/svr4pkg.py:
|
||||||
@@ -877,9 +707,7 @@ files:
|
|||||||
labels: zypper
|
labels: zypper
|
||||||
ignore: dirtyharrycallahan robinro
|
ignore: dirtyharrycallahan robinro
|
||||||
$modules/packaging/os/zypper_repository.py:
|
$modules/packaging/os/zypper_repository.py:
|
||||||
maintainers: $team_suse
|
maintainers: matze
|
||||||
labels: zypper
|
|
||||||
ignore: matze
|
|
||||||
$modules/remote_management/cobbler/:
|
$modules/remote_management/cobbler/:
|
||||||
maintainers: dagwieers
|
maintainers: dagwieers
|
||||||
$modules/remote_management/hpilo/:
|
$modules/remote_management/hpilo/:
|
||||||
@@ -945,8 +773,6 @@ files:
|
|||||||
maintainers: markuman
|
maintainers: markuman
|
||||||
$modules/source_control/gitlab/gitlab_runner.py:
|
$modules/source_control/gitlab/gitlab_runner.py:
|
||||||
maintainers: SamyCoenen
|
maintainers: SamyCoenen
|
||||||
$modules/source_control/gitlab/gitlab_user.py:
|
|
||||||
maintainers: LennertMertens stgrace
|
|
||||||
$modules/source_control/hg.py:
|
$modules/source_control/hg.py:
|
||||||
maintainers: yeukhon
|
maintainers: yeukhon
|
||||||
$modules/storage/emc/emc_vnx_sg_member.py:
|
$modules/storage/emc/emc_vnx_sg_member.py:
|
||||||
@@ -955,6 +781,13 @@ files:
|
|||||||
maintainers: farhan7500 gautamphegde
|
maintainers: farhan7500 gautamphegde
|
||||||
$modules/storage/ibm/:
|
$modules/storage/ibm/:
|
||||||
maintainers: tzure
|
maintainers: tzure
|
||||||
|
$modules/storage/infinidat/:
|
||||||
|
maintainers: vmalloc GR360RY
|
||||||
|
$modules/storage/netapp/:
|
||||||
|
maintainers: $team_netapp
|
||||||
|
$modules/storage/purestorage/:
|
||||||
|
maintainers: $team_purestorage
|
||||||
|
labels: pure_storage
|
||||||
$modules/storage/vexata/:
|
$modules/storage/vexata/:
|
||||||
maintainers: vexata
|
maintainers: vexata
|
||||||
$modules/storage/zfs/:
|
$modules/storage/zfs/:
|
||||||
@@ -973,8 +806,6 @@ files:
|
|||||||
maintainers: mulby
|
maintainers: mulby
|
||||||
labels: alternatives
|
labels: alternatives
|
||||||
ignore: DavidWittman
|
ignore: DavidWittman
|
||||||
$modules/system/aix_lvol.py:
|
|
||||||
maintainers: adejoux
|
|
||||||
$modules/system/awall.py:
|
$modules/system/awall.py:
|
||||||
maintainers: tdtrask
|
maintainers: tdtrask
|
||||||
$modules/system/beadm.py:
|
$modules/system/beadm.py:
|
||||||
@@ -992,7 +823,7 @@ files:
|
|||||||
$modules/system/dpkg_divert.py:
|
$modules/system/dpkg_divert.py:
|
||||||
maintainers: quidame
|
maintainers: quidame
|
||||||
$modules/system/facter.py:
|
$modules/system/facter.py:
|
||||||
maintainers: $team_ansible_core gamethis
|
maintainers: ansible gamethis
|
||||||
labels: facter
|
labels: facter
|
||||||
$modules/system/filesystem.py:
|
$modules/system/filesystem.py:
|
||||||
maintainers: pilou- abulimov quidame
|
maintainers: pilou- abulimov quidame
|
||||||
@@ -1005,12 +836,10 @@ files:
|
|||||||
labels: interfaces_file
|
labels: interfaces_file
|
||||||
$modules/system/iptables_state.py:
|
$modules/system/iptables_state.py:
|
||||||
maintainers: quidame
|
maintainers: quidame
|
||||||
$modules/system/shutdown.py:
|
|
||||||
maintainers: nitzmahone samdoran aminvakil
|
|
||||||
$modules/system/java_cert.py:
|
$modules/system/java_cert.py:
|
||||||
maintainers: haad absynth76
|
maintainers: haad absynth76
|
||||||
$modules/system/java_keystore.py:
|
$modules/system/java_keystore.py:
|
||||||
maintainers: Mogztter quidame
|
maintainers: Mogztter
|
||||||
$modules/system/kernel_blacklist.py:
|
$modules/system/kernel_blacklist.py:
|
||||||
maintainers: matze
|
maintainers: matze
|
||||||
$modules/system/launchd.py:
|
$modules/system/launchd.py:
|
||||||
@@ -1024,7 +853,7 @@ files:
|
|||||||
$modules/system/lvg.py:
|
$modules/system/lvg.py:
|
||||||
maintainers: abulimov
|
maintainers: abulimov
|
||||||
$modules/system/lvol.py:
|
$modules/system/lvol.py:
|
||||||
maintainers: abulimov jhoekx zigaSRC unkaputtbar112
|
maintainers: abulimov jhoekx
|
||||||
$modules/system/make.py:
|
$modules/system/make.py:
|
||||||
maintainers: LinusU
|
maintainers: LinusU
|
||||||
$modules/system/mksysb.py:
|
$modules/system/mksysb.py:
|
||||||
@@ -1037,7 +866,7 @@ files:
|
|||||||
$modules/system/nosh.py:
|
$modules/system/nosh.py:
|
||||||
maintainers: tacatac
|
maintainers: tacatac
|
||||||
$modules/system/ohai.py:
|
$modules/system/ohai.py:
|
||||||
maintainers: $team_ansible_core mpdehaan
|
maintainers: ansible mpdehaan
|
||||||
labels: ohai
|
labels: ohai
|
||||||
$modules/system/open_iscsi.py:
|
$modules/system/open_iscsi.py:
|
||||||
maintainers: srvg
|
maintainers: srvg
|
||||||
@@ -1066,8 +895,6 @@ files:
|
|||||||
ignore: ryansb
|
ignore: ryansb
|
||||||
$modules/system/runit.py:
|
$modules/system/runit.py:
|
||||||
maintainers: jsumners
|
maintainers: jsumners
|
||||||
$modules/system/sap_task_list_execute:
|
|
||||||
maintainers: rainerleber
|
|
||||||
$modules/system/sefcontext.py:
|
$modules/system/sefcontext.py:
|
||||||
maintainers: dagwieers
|
maintainers: dagwieers
|
||||||
$modules/system/selinux_permissive.py:
|
$modules/system/selinux_permissive.py:
|
||||||
@@ -1080,8 +907,6 @@ files:
|
|||||||
maintainers: $team_solaris pmarkham
|
maintainers: $team_solaris pmarkham
|
||||||
labels: solaris
|
labels: solaris
|
||||||
keywords: beadm dladm illumos ipadm nexenta omnios openindiana pfexec smartos solaris sunos zfs zpool
|
keywords: beadm dladm illumos ipadm nexenta omnios openindiana pfexec smartos solaris sunos zfs zpool
|
||||||
$modules/system/ssh_config.py:
|
|
||||||
maintainers: gaqzi Akasurde
|
|
||||||
$modules/system/svc.py:
|
$modules/system/svc.py:
|
||||||
maintainers: bcoca
|
maintainers: bcoca
|
||||||
$modules/system/syspatch.py:
|
$modules/system/syspatch.py:
|
||||||
@@ -1097,38 +922,31 @@ files:
|
|||||||
maintainers: ahtik ovcharenko pyykkis
|
maintainers: ahtik ovcharenko pyykkis
|
||||||
labels: ufw
|
labels: ufw
|
||||||
$modules/system/vdo.py:
|
$modules/system/vdo.py:
|
||||||
maintainers: rhawalsh bgurney-rh
|
maintainers: rhawalsh
|
||||||
$modules/system/xfconf.py:
|
$modules/system/xfconf.py:
|
||||||
maintainers: russoz jbenden
|
maintainers: russoz jbenden
|
||||||
labels: xfconf
|
labels: xfconf
|
||||||
$modules/system/xfconf_info.py:
|
|
||||||
maintainers: russoz
|
|
||||||
labels: xfconf
|
|
||||||
$modules/system/xfs_quota.py:
|
$modules/system/xfs_quota.py:
|
||||||
maintainers: bushvin
|
maintainers: bushvin
|
||||||
$modules/web_infrastructure/apache2_mod_proxy.py:
|
$modules/web_infrastructure/apache2_mod_proxy.py:
|
||||||
maintainers: oboukili
|
maintainers: oboukili
|
||||||
$modules/web_infrastructure/apache2_module.py:
|
$modules/web_infrastructure/apache2_module.py:
|
||||||
maintainers: berendt n0trax
|
maintainers: berendt n0trax robinro
|
||||||
ignore: robinro
|
|
||||||
$modules/web_infrastructure/deploy_helper.py:
|
$modules/web_infrastructure/deploy_helper.py:
|
||||||
maintainers: ramondelafuente
|
maintainers: ramondelafuente
|
||||||
$modules/web_infrastructure/django_manage.py:
|
$modules/web_infrastructure/django_manage.py:
|
||||||
maintainers: russoz
|
maintainers: scottanderson42 russoz tastychutney
|
||||||
ignore: scottanderson42 tastychutney
|
|
||||||
labels: django_manage
|
labels: django_manage
|
||||||
$modules/web_infrastructure/ejabberd_user.py:
|
$modules/web_infrastructure/ejabberd_user.py:
|
||||||
maintainers: privateip
|
maintainers: privateip
|
||||||
$modules/web_infrastructure/gunicorn.py:
|
$modules/web_infrastructure/gunicorn.py:
|
||||||
maintainers: agmezr
|
maintainers: agmezr
|
||||||
$modules/web_infrastructure/htpasswd.py:
|
$modules/web_infrastructure/htpasswd.py:
|
||||||
maintainers: $team_ansible_core
|
maintainers: ansible
|
||||||
labels: htpasswd
|
labels: htpasswd
|
||||||
$modules/web_infrastructure/jboss.py:
|
$modules/web_infrastructure/jboss.py:
|
||||||
maintainers: $team_jboss jhoekx
|
maintainers: $team_jboss jhoekx
|
||||||
labels: jboss
|
labels: jboss
|
||||||
$modules/web_infrastructure/jenkins_build.py:
|
|
||||||
maintainers: brettmilford unnecessary-username
|
|
||||||
$modules/web_infrastructure/jenkins_job.py:
|
$modules/web_infrastructure/jenkins_job.py:
|
||||||
maintainers: sermilrod
|
maintainers: sermilrod
|
||||||
$modules/web_infrastructure/jenkins_job_info.py:
|
$modules/web_infrastructure/jenkins_job_info.py:
|
||||||
@@ -1138,18 +956,12 @@ files:
|
|||||||
$modules/web_infrastructure/jenkins_script.py:
|
$modules/web_infrastructure/jenkins_script.py:
|
||||||
maintainers: hogarthj
|
maintainers: hogarthj
|
||||||
$modules/web_infrastructure/jira.py:
|
$modules/web_infrastructure/jira.py:
|
||||||
maintainers: Slezhuk tarka pertoft DWSR
|
maintainers: Slezhuk tarka
|
||||||
labels: jira
|
labels: jira
|
||||||
$modules/web_infrastructure/nginx_status_info.py:
|
$modules/web_infrastructure/nginx_status_info.py:
|
||||||
maintainers: resmo
|
maintainers: resmo
|
||||||
$modules/web_infrastructure/rundeck_acl_policy.py:
|
$modules/web_infrastructure/:
|
||||||
maintainers: nerzhul
|
maintainers: nerzhul
|
||||||
$modules/web_infrastructure/rundeck_project.py:
|
|
||||||
maintainers: nerzhul
|
|
||||||
$modules/web_infrastructure/rundeck_job_run.py:
|
|
||||||
maintainers: phsmith
|
|
||||||
$modules/web_infrastructure/rundeck_job_executions_info.py:
|
|
||||||
maintainers: phsmith
|
|
||||||
$modules/web_infrastructure/sophos_utm/:
|
$modules/web_infrastructure/sophos_utm/:
|
||||||
maintainers: $team_e_spirit
|
maintainers: $team_e_spirit
|
||||||
keywords: sophos utm
|
keywords: sophos utm
|
||||||
@@ -1159,20 +971,10 @@ files:
|
|||||||
$modules/web_infrastructure/sophos_utm/utm_proxy_exception.py:
|
$modules/web_infrastructure/sophos_utm/utm_proxy_exception.py:
|
||||||
maintainers: $team_e_spirit RickS-C137
|
maintainers: $team_e_spirit RickS-C137
|
||||||
keywords: sophos utm
|
keywords: sophos utm
|
||||||
$modules/web_infrastructure/sophos_utm/utm_ca_host_key_cert.py:
|
|
||||||
maintainers: stearz
|
|
||||||
$modules/web_infrastructure/sophos_utm/utm_ca_host_key_cert_info.py:
|
|
||||||
maintainers: stearz
|
|
||||||
$modules/web_infrastructure/sophos_utm/utm_network_interface_address.py:
|
|
||||||
maintainers: steamx
|
|
||||||
$modules/web_infrastructure/sophos_utm/utm_network_interface_address_info.py:
|
|
||||||
maintainers: steamx
|
|
||||||
$modules/web_infrastructure/supervisorctl.py:
|
$modules/web_infrastructure/supervisorctl.py:
|
||||||
maintainers: inetfuture mattupstate
|
maintainers: inetfuture mattupstate
|
||||||
$modules/web_infrastructure/taiga_issue.py:
|
$modules/web_infrastructure/taiga_issue.py:
|
||||||
maintainers: lekum
|
maintainers: lekum
|
||||||
$tests/a_module.py:
|
|
||||||
maintainers: felixfontein
|
|
||||||
#########################
|
#########################
|
||||||
tests/:
|
tests/:
|
||||||
labels: tests
|
labels: tests
|
||||||
@@ -1188,26 +990,24 @@ files:
|
|||||||
macros:
|
macros:
|
||||||
actions: plugins/action
|
actions: plugins/action
|
||||||
becomes: plugins/become
|
becomes: plugins/become
|
||||||
caches: plugins/cache
|
|
||||||
callbacks: plugins/callback
|
callbacks: plugins/callback
|
||||||
cliconfs: plugins/cliconf
|
cliconfs: plugins/cliconf
|
||||||
connections: plugins/connection
|
connections: plugins/connection
|
||||||
doc_fragments: plugins/doc_fragments
|
doc_fragments: plugins/doc_fragments
|
||||||
filters: plugins/filter
|
filters: plugins/filter
|
||||||
|
httpapis: plugins/httpapi
|
||||||
inventories: plugins/inventory
|
inventories: plugins/inventory
|
||||||
lookups: plugins/lookup
|
lookups: plugins/lookup
|
||||||
module_utils: plugins/module_utils
|
module_utils: plugins/module_utils
|
||||||
modules: plugins/modules
|
modules: plugins/modules
|
||||||
terminals: plugins/terminal
|
terminals: plugins/terminal
|
||||||
tests: plugins/test
|
|
||||||
team_ansible_core:
|
|
||||||
team_aix: MorrisA bcoca d-little flynn1973 gforster kairoaraujo marvin-sinister mator molekuul ramooncamacho wtcross
|
team_aix: MorrisA bcoca d-little flynn1973 gforster kairoaraujo marvin-sinister mator molekuul ramooncamacho wtcross
|
||||||
team_bsd: JoergFiedler MacLemon bcoca dch jasperla mekanix opoplawski overhacked tuxillo
|
team_bsd: JoergFiedler MacLemon bcoca dch jasperla mekanix opoplawski overhacked tuxillo
|
||||||
team_consul: sgargan
|
team_consul: sgargan
|
||||||
team_cyberark_conjur: jvanderhoof ryanprior
|
team_cyberark_conjur: jvanderhoof ryanprior
|
||||||
team_e_spirit: MatrixCrawler getjack
|
team_e_spirit: MatrixCrawler getjack
|
||||||
team_flatpak: JayKayy oolongbrothers
|
team_flatpak: JayKayy oolongbrothers
|
||||||
team_gitlab: Lunik Shaps dj-wasabi marwatk waheedi zanssa scodeman metanovii sh0shin
|
team_gitlab: Lunik Shaps dj-wasabi marwatk waheedi zanssa scodeman metanovii
|
||||||
team_hpux: bcoca davx8342
|
team_hpux: bcoca davx8342
|
||||||
team_huawei: QijunPan TommyLike edisonxiang freesky-edward hwDCN niuzhenguo xuxiaowei0512 yanzhangi zengchen1024 zhongjun2
|
team_huawei: QijunPan TommyLike edisonxiang freesky-edward hwDCN niuzhenguo xuxiaowei0512 yanzhangi zengchen1024 zhongjun2
|
||||||
team_ipa: Akasurde Nosmoht fxfitz justchris1
|
team_ipa: Akasurde Nosmoht fxfitz justchris1
|
||||||
@@ -1216,6 +1016,7 @@ macros:
|
|||||||
team_linode: InTheCloudDan decentral1se displague rmcintosh Charliekenney23 LBGarber
|
team_linode: InTheCloudDan decentral1se displague rmcintosh Charliekenney23 LBGarber
|
||||||
team_macos: Akasurde kyleabenson martinm82 danieljaouen indrajitr
|
team_macos: Akasurde kyleabenson martinm82 danieljaouen indrajitr
|
||||||
team_manageiq: abellotti cben gtanzillo yaacov zgalor dkorn evertmulder
|
team_manageiq: abellotti cben gtanzillo yaacov zgalor dkorn evertmulder
|
||||||
|
team_netapp: amit0701 carchi8py hulquest lmprice lonico ndswartz schmots1
|
||||||
team_networking: NilashishC Qalthos danielmellado ganeshrn justjais trishnaguha sganesh-infoblox privateip
|
team_networking: NilashishC Qalthos danielmellado ganeshrn justjais trishnaguha sganesh-infoblox privateip
|
||||||
team_opennebula: ilicmilan meerkampdvv rsmontero xorel nilsding
|
team_opennebula: ilicmilan meerkampdvv rsmontero xorel nilsding
|
||||||
team_oracle: manojmeda mross22 nalsaber
|
team_oracle: manojmeda mross22 nalsaber
|
||||||
@@ -1224,5 +1025,5 @@ macros:
|
|||||||
team_rhn: FlossWare alikins barnabycourt vritant
|
team_rhn: FlossWare alikins barnabycourt vritant
|
||||||
team_scaleway: QuentinBrosse abarbare jerome-quere kindermoumoute remyleone sieben
|
team_scaleway: QuentinBrosse abarbare jerome-quere kindermoumoute remyleone sieben
|
||||||
team_solaris: bcoca fishman jasperla jpdasma mator scathatheworm troy2914 xen0l
|
team_solaris: bcoca fishman jasperla jpdasma mator scathatheworm troy2914 xen0l
|
||||||
team_suse: commel dcermak evrardjp lrupp toabctl AnderEnder alxgu andytom sealor
|
team_suse: commel dcermak evrardjp lrupp toabctl AnderEnder alxgu andytom
|
||||||
team_virt: joshainglis karmab tleguern Thulium-Drake Ajpantuso
|
team_virt: joshainglis karmab tleguern Thulium-Drake Ajpantuso
|
||||||
|
|||||||
14
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
14
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -62,20 +62,6 @@ body:
|
|||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Community.general Version
|
|
||||||
description: >-
|
|
||||||
Paste verbatim output from "ansible-galaxy collection list community.general"
|
|
||||||
between tripple backticks.
|
|
||||||
value: |
|
|
||||||
```console (paste below)
|
|
||||||
$ ansible-galaxy collection list community.general
|
|
||||||
|
|
||||||
```
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Configuration
|
label: Configuration
|
||||||
|
|||||||
14
.github/ISSUE_TEMPLATE/documentation_report.yml
vendored
14
.github/ISSUE_TEMPLATE/documentation_report.yml
vendored
@@ -62,20 +62,6 @@ body:
|
|||||||
validations:
|
validations:
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Community.general Version
|
|
||||||
description: >-
|
|
||||||
Paste verbatim output from "ansible-galaxy collection list community.general"
|
|
||||||
between tripple backticks.
|
|
||||||
value: |
|
|
||||||
```console (paste below)
|
|
||||||
$ ansible-galaxy collection list community.general
|
|
||||||
|
|
||||||
```
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Configuration
|
label: Configuration
|
||||||
|
|||||||
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -21,7 +21,7 @@ body:
|
|||||||
placeholder: >-
|
placeholder: >-
|
||||||
I am trying to do X with the collection from the main branch on GitHub and
|
I am trying to do X with the collection from the main branch on GitHub and
|
||||||
I think that implementing a feature Y would be very helpful for me and
|
I think that implementing a feature Y would be very helpful for me and
|
||||||
every other user of community.general because of Z.
|
every other user of ansible-core because of Z.
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
|||||||
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
@@ -1,6 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
interval:
|
|
||||||
schedule: "weekly"
|
|
||||||
81
.gitignore
vendored
81
.gitignore
vendored
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv
|
# Created by https://www.gitignore.io/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv
|
# Edit at https://www.gitignore.io/?templates=git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv
|
||||||
|
|
||||||
### dotenv ###
|
### dotenv ###
|
||||||
.env
|
.env
|
||||||
@@ -88,7 +88,7 @@ flycheck_*.el
|
|||||||
.nfs*
|
.nfs*
|
||||||
|
|
||||||
### PyCharm+all ###
|
### PyCharm+all ###
|
||||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
|
||||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
# User-specific stuff
|
# User-specific stuff
|
||||||
@@ -98,9 +98,6 @@ flycheck_*.el
|
|||||||
.idea/**/dictionaries
|
.idea/**/dictionaries
|
||||||
.idea/**/shelf
|
.idea/**/shelf
|
||||||
|
|
||||||
# AWS User-specific
|
|
||||||
.idea/**/aws.xml
|
|
||||||
|
|
||||||
# Generated files
|
# Generated files
|
||||||
.idea/**/contentModel.xml
|
.idea/**/contentModel.xml
|
||||||
|
|
||||||
@@ -121,9 +118,6 @@ flycheck_*.el
|
|||||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||||
# since they will be recreated, and may cause churn. Uncomment if using
|
# since they will be recreated, and may cause churn. Uncomment if using
|
||||||
# auto-import.
|
# auto-import.
|
||||||
# .idea/artifacts
|
|
||||||
# .idea/compiler.xml
|
|
||||||
# .idea/jarRepositories.xml
|
|
||||||
# .idea/modules.xml
|
# .idea/modules.xml
|
||||||
# .idea/*.iml
|
# .idea/*.iml
|
||||||
# .idea/modules
|
# .idea/modules
|
||||||
@@ -204,6 +198,7 @@ parts/
|
|||||||
sdist/
|
sdist/
|
||||||
var/
|
var/
|
||||||
wheels/
|
wheels/
|
||||||
|
pip-wheel-metadata/
|
||||||
share/python-wheels/
|
share/python-wheels/
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
.installed.cfg
|
.installed.cfg
|
||||||
@@ -230,25 +225,13 @@ htmlcov/
|
|||||||
nosetests.xml
|
nosetests.xml
|
||||||
coverage.xml
|
coverage.xml
|
||||||
*.cover
|
*.cover
|
||||||
*.py,cover
|
|
||||||
.hypothesis/
|
.hypothesis/
|
||||||
.pytest_cache/
|
.pytest_cache/
|
||||||
cover/
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
*.mo
|
*.mo
|
||||||
*.pot
|
*.pot
|
||||||
|
|
||||||
# Django stuff:
|
|
||||||
*.log
|
|
||||||
local_settings.py
|
|
||||||
db.sqlite3
|
|
||||||
db.sqlite3-journal
|
|
||||||
|
|
||||||
# Flask stuff:
|
|
||||||
instance/
|
|
||||||
.webassets-cache
|
|
||||||
|
|
||||||
# Scrapy stuff:
|
# Scrapy stuff:
|
||||||
.scrapy
|
.scrapy
|
||||||
|
|
||||||
@@ -256,19 +239,9 @@ instance/
|
|||||||
docs/_build/
|
docs/_build/
|
||||||
|
|
||||||
# PyBuilder
|
# PyBuilder
|
||||||
.pybuilder/
|
|
||||||
target/
|
target/
|
||||||
|
|
||||||
# Jupyter Notebook
|
|
||||||
.ipynb_checkpoints
|
|
||||||
|
|
||||||
# IPython
|
|
||||||
profile_default/
|
|
||||||
ipython_config.py
|
|
||||||
|
|
||||||
# pyenv
|
# pyenv
|
||||||
# For a library or package, you might want to ignore these files since the code is
|
|
||||||
# intended to run in multiple environments; otherwise, check them in:
|
|
||||||
.python-version
|
.python-version
|
||||||
|
|
||||||
# pipenv
|
# pipenv
|
||||||
@@ -278,24 +251,12 @@ ipython_config.py
|
|||||||
# install all needed dependencies.
|
# install all needed dependencies.
|
||||||
#Pipfile.lock
|
#Pipfile.lock
|
||||||
|
|
||||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
# celery beat schedule file
|
||||||
__pypackages__/
|
|
||||||
|
|
||||||
# Celery stuff
|
|
||||||
celerybeat-schedule
|
celerybeat-schedule
|
||||||
celerybeat.pid
|
|
||||||
|
|
||||||
# SageMath parsed files
|
# SageMath parsed files
|
||||||
*.sage.py
|
*.sage.py
|
||||||
|
|
||||||
# Environments
|
|
||||||
.venv
|
|
||||||
env/
|
|
||||||
venv/
|
|
||||||
ENV/
|
|
||||||
env.bak/
|
|
||||||
venv.bak/
|
|
||||||
|
|
||||||
# Spyder project settings
|
# Spyder project settings
|
||||||
.spyderproject
|
.spyderproject
|
||||||
.spyproject
|
.spyproject
|
||||||
@@ -303,6 +264,10 @@ venv.bak/
|
|||||||
# Rope project settings
|
# Rope project settings
|
||||||
.ropeproject
|
.ropeproject
|
||||||
|
|
||||||
|
# Mr Developer
|
||||||
|
.mr.developer.cfg
|
||||||
|
.project
|
||||||
|
|
||||||
# mkdocs documentation
|
# mkdocs documentation
|
||||||
/site
|
/site
|
||||||
|
|
||||||
@@ -314,16 +279,9 @@ dmypy.json
|
|||||||
# Pyre type checker
|
# Pyre type checker
|
||||||
.pyre/
|
.pyre/
|
||||||
|
|
||||||
# pytype static type analyzer
|
|
||||||
.pytype/
|
|
||||||
|
|
||||||
# Cython debug symbols
|
|
||||||
cython_debug/
|
|
||||||
|
|
||||||
### Vim ###
|
### Vim ###
|
||||||
# Swap
|
# Swap
|
||||||
[._]*.s[a-v][a-z]
|
[._]*.s[a-v][a-z]
|
||||||
!*.svg # comment out if you don't need vector files
|
|
||||||
[._]*.sw[a-p]
|
[._]*.sw[a-p]
|
||||||
[._]s[a-rt-v][a-z]
|
[._]s[a-rt-v][a-z]
|
||||||
[._]ss[a-gi-z]
|
[._]ss[a-gi-z]
|
||||||
@@ -341,13 +299,11 @@ tags
|
|||||||
[._]*.un~
|
[._]*.un~
|
||||||
|
|
||||||
### WebStorm ###
|
### WebStorm ###
|
||||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
|
||||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
# User-specific stuff
|
# User-specific stuff
|
||||||
|
|
||||||
# AWS User-specific
|
|
||||||
|
|
||||||
# Generated files
|
# Generated files
|
||||||
|
|
||||||
# Sensitive or high-churn files
|
# Sensitive or high-churn files
|
||||||
@@ -358,9 +314,6 @@ tags
|
|||||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||||
# since they will be recreated, and may cause churn. Uncomment if using
|
# since they will be recreated, and may cause churn. Uncomment if using
|
||||||
# auto-import.
|
# auto-import.
|
||||||
# .idea/artifacts
|
|
||||||
# .idea/compiler.xml
|
|
||||||
# .idea/jarRepositories.xml
|
|
||||||
# .idea/modules.xml
|
# .idea/modules.xml
|
||||||
# .idea/*.iml
|
# .idea/*.iml
|
||||||
# .idea/modules
|
# .idea/modules
|
||||||
@@ -396,27 +349,15 @@ tags
|
|||||||
# *.ipr
|
# *.ipr
|
||||||
|
|
||||||
# Sonarlint plugin
|
# Sonarlint plugin
|
||||||
# https://plugins.jetbrains.com/plugin/7973-sonarlint
|
|
||||||
.idea/**/sonarlint/
|
.idea/**/sonarlint/
|
||||||
|
|
||||||
# SonarQube Plugin
|
# SonarQube Plugin
|
||||||
# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
|
|
||||||
.idea/**/sonarIssues.xml
|
.idea/**/sonarIssues.xml
|
||||||
|
|
||||||
# Markdown Navigator plugin
|
# Markdown Navigator plugin
|
||||||
# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
|
|
||||||
.idea/**/markdown-navigator.xml
|
.idea/**/markdown-navigator.xml
|
||||||
.idea/**/markdown-navigator-enh.xml
|
|
||||||
.idea/**/markdown-navigator/
|
.idea/**/markdown-navigator/
|
||||||
|
|
||||||
# Cache file creation bug
|
|
||||||
# See https://youtrack.jetbrains.com/issue/JBR-2257
|
|
||||||
.idea/$CACHE_FILE$
|
|
||||||
|
|
||||||
# CodeStream plugin
|
|
||||||
# https://plugins.jetbrains.com/plugin/12206-codestream
|
|
||||||
.idea/codestream.xml
|
|
||||||
|
|
||||||
### Windows ###
|
### Windows ###
|
||||||
# Windows thumbnail cache files
|
# Windows thumbnail cache files
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
@@ -443,4 +384,4 @@ $RECYCLE.BIN/
|
|||||||
# Windows shortcuts
|
# Windows shortcuts
|
||||||
*.lnk
|
*.lnk
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv
|
# End of https://www.gitignore.io/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv
|
||||||
|
|||||||
904
CHANGELOG.rst
904
CHANGELOG.rst
@@ -4,463 +4,456 @@ Community General Release Notes
|
|||||||
|
|
||||||
.. contents:: Topics
|
.. contents:: Topics
|
||||||
|
|
||||||
This changelog describes changes after version 3.0.0.
|
This changelog describes changes after version 2.0.0.
|
||||||
|
|
||||||
v4.0.2
|
v3.0.0
|
||||||
======
|
======
|
||||||
|
|
||||||
Release Summary
|
Release Summary
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
Bugfix release for today's Ansible 5.0.0 beta 2.
|
This is release 3.0.0 of ``community.general``, released on 2021-04-26.
|
||||||
|
|
||||||
Deprecated Features
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
- Support for Ansible 2.9 and ansible-base 2.10 is deprecated, and will be removed in the next major release (community.general 5.0.0) next spring. While most content will probably still work with ansible-base 2.10, we will remove symbolic links for modules and action plugins, which will make it impossible to use them with Ansible 2.9 anymore. Please use community.general 4.x.y with Ansible 2.9 and ansible-base 2.10, as these releases will continue to support Ansible 2.9 and ansible-base 2.10 even after they are End of Life (https://github.com/ansible-community/community-topics/issues/50, https://github.com/ansible-collections/community.general/pull/3723).
|
|
||||||
|
|
||||||
Bugfixes
|
|
||||||
--------
|
|
||||||
|
|
||||||
- counter_enabled callback plugin - fix output to correctly display host and task counters in serial mode (https://github.com/ansible-collections/community.general/pull/3709).
|
|
||||||
- ldap_search - allow it to be used even in check mode (https://github.com/ansible-collections/community.general/issues/3619).
|
|
||||||
- lvol - allows logical volumes to be created with certain size arguments prefixed with ``+`` to preserve behavior of older versions of this module (https://github.com/ansible-collections/community.general/issues/3665).
|
|
||||||
- nmcli - fixed falsely reported changed status when ``mtu`` is omitted with ``dummy`` connections (https://github.com/ansible-collections/community.general/issues/3612, https://github.com/ansible-collections/community.general/pull/3625).
|
|
||||||
|
|
||||||
v4.0.1
|
|
||||||
======
|
|
||||||
|
|
||||||
Release Summary
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Bugfix release for today's Ansible 5.0.0 beta 1.
|
|
||||||
|
|
||||||
Bugfixes
|
|
||||||
--------
|
|
||||||
|
|
||||||
- a_module test plugin - fix crash when testing a module name that was tombstoned (https://github.com/ansible-collections/community.general/pull/3660).
|
|
||||||
- xattr - fix exception caused by ``_run_xattr()`` raising a ``ValueError`` due to a mishandling of base64-encoded value (https://github.com/ansible-collections/community.general/issues/3673).
|
|
||||||
|
|
||||||
v4.0.0
|
|
||||||
======
|
|
||||||
|
|
||||||
Release Summary
|
|
||||||
---------------
|
|
||||||
|
|
||||||
This is release 4.0.0 of ``community.general``, released on 2021-11-02.
|
|
||||||
|
|
||||||
Major Changes
|
|
||||||
-------------
|
|
||||||
|
|
||||||
- bitbucket_* modules - ``client_id`` is no longer marked as ``no_log=true``. If you relied on its value not showing up in logs and output, please mark the whole tasks with ``no_log: true`` (https://github.com/ansible-collections/community.general/pull/2045).
|
|
||||||
|
|
||||||
Minor Changes
|
Minor Changes
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
- Avoid internal ansible-core module_utils in favor of equivalent public API available since at least Ansible 2.9 (https://github.com/ansible-collections/community.general/pull/2877).
|
- apache2_mod_proxy - refactored/cleaned-up part of the code (https://github.com/ansible-collections/community.general/pull/2142).
|
||||||
- ModuleHelper module utils - improved mechanism for customizing the calculation of ``changed`` (https://github.com/ansible-collections/community.general/pull/2514).
|
- archive - refactored some reused code out into a couple of functions (https://github.com/ansible-collections/community.general/pull/2061).
|
||||||
- Remove unnecessary ``__init__.py`` files from ``plugins/`` (https://github.com/ansible-collections/community.general/pull/2632).
|
- atomic_container - using ``get_bin_path()`` before calling ``run_command()`` (https://github.com/ansible-collections/community.general/pull/2144).
|
||||||
- apache2_module - minor refactoring improving code quality, readability and speed (https://github.com/ansible-collections/community.general/pull/3106).
|
- atomic_host - using ``get_bin_path()`` before calling ``run_command()`` (https://github.com/ansible-collections/community.general/pull/2144).
|
||||||
- archive - added ``dest_state`` return value to describe final state of ``dest`` after successful task execution (https://github.com/ansible-collections/community.general/pull/2913).
|
- atomic_image - using ``get_bin_path()`` before calling ``run_command()`` (https://github.com/ansible-collections/community.general/pull/2144).
|
||||||
- archive - added ``exclusion_patterns`` option to exclude files or subdirectories from archives (https://github.com/ansible-collections/community.general/pull/2616).
|
- beadm - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- archive - refactoring prior to fix for idempotency checks. The fix will be a breaking change and only appear in community.general 4.0.0 (https://github.com/ansible-collections/community.general/pull/2987).
|
- bitbucket_pipeline_variable - removed unreachable code (https://github.com/ansible-collections/community.general/pull/2157).
|
||||||
- bitbucket_* modules - add ``user`` and ``password`` options for Basic authentication (https://github.com/ansible-collections/community.general/pull/2045).
|
- bundler - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- chroot connection - minor refactor to make lints and IDEs happy (https://github.com/ansible-collections/community.general/pull/2520).
|
- clc_* modules - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1771).
|
||||||
- cloud_init_data_facts - minor refactor (https://github.com/ansible-collections/community.general/pull/2557).
|
- consul - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- cmd (Module Helper) module utils - ``CmdMixin`` now pulls the value for ``run_command()`` params from ``self.vars``, as opposed to previously retrieving those from ``self.module.params`` (https://github.com/ansible-collections/community.general/pull/2517).
|
- consul_acl - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- composer - add ``composer_executable`` option (https://github.com/ansible-collections/community.general/issues/2649).
|
- consul_io inventory script - conf options - allow custom configuration options via env variables (https://github.com/ansible-collections/community.general/pull/620).
|
||||||
- datadog_event - adding parameter ``api_host`` to allow selecting a datadog API endpoint instead of using the default one (https://github.com/ansible-collections/community.general/issues/2774, https://github.com/ansible-collections/community.general/pull/2775).
|
- consul_session - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- datadog_monitor - allow creation of composite datadog monitors (https://github.com/ansible-collections/community.general/issues/2956).
|
- cpanm - honor and install specified version when running in ``new`` mode; that feature is not available in ``compatibility`` mode (https://github.com/ansible-collections/community.general/issues/208).
|
||||||
- dig lookup plugin - add ``retry_servfail`` option (https://github.com/ansible-collections/community.general/pull/3247).
|
- cpanm - rewritten using ``ModuleHelper`` (https://github.com/ansible-collections/community.general/pull/2218).
|
||||||
- dnsimple - module rewrite to include support for python-dnsimple>=2.0.0; also add ``sandbox`` parameter (https://github.com/ansible-collections/community.general/pull/2946).
|
- csv module utils - new module_utils for shared functions between ``from_csv`` filter and ``read_csv`` module (https://github.com/ansible-collections/community.general/pull/2037).
|
||||||
- elastic callback plugin - enriched the stacktrace information with the ``message``, ``exception`` and ``stderr`` fields from the failed task (https://github.com/ansible-collections/community.general/pull/3556).
|
- datadog_monitor - add missing monitor types ``query alert``, ``trace-analytics alert``, ``rum alert`` (https://github.com/ansible-collections/community.general/pull/1723).
|
||||||
- filesystem - cleanup and revamp module, tests and doc. Pass all commands to ``module.run_command()`` as lists. Move the device-vs-mountpoint logic to ``grow()`` method. Give to all ``get_fs_size()`` the same logic and error handling. (https://github.com/ansible-collections/community.general/pull/2472).
|
- datadog_monitor - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- filesystem - extend support for FreeBSD. Avoid potential data loss by checking existence of a filesystem with ``fstyp`` (native command) if ``blkid`` (foreign command) doesn't find one. Add support for character devices and ``ufs`` filesystem type (https://github.com/ansible-collections/community.general/pull/2902).
|
- dnsimple - add CAA records to the whitelist of valid record types (https://github.com/ansible-collections/community.general/pull/1814).
|
||||||
- flatpak - add ``no_dependencies`` parameter (https://github.com/ansible/ansible/pull/55452, https://github.com/ansible-collections/community.general/pull/2751).
|
- dnsimple - elements of list parameters ``record_ids`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- flatpak - allows installing or uninstalling a list of packages (https://github.com/ansible-collections/community.general/pull/2521).
|
- gitlab_deploy_key - when the given key title already exists but has a different public key, the public key will now be updated to given value (https://github.com/ansible-collections/community.general/pull/1661).
|
||||||
- funcd connection - minor refactor to make lints and IDEs happy (https://github.com/ansible-collections/community.general/pull/2520).
|
- gitlab_runner - elements of list parameters ``tag_list`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- gem - add ``bindir`` option to specify an installation path for executables such as ``/home/user/bin`` or ``/home/user/.local/bin`` (https://github.com/ansible-collections/community.general/pull/2837).
|
- grove - the option ``message`` has been renamed to ``message_content``. The old name ``message`` is kept as an alias and will be removed for community.general 4.0.0. This was done because ``message`` is used internally by Ansible (https://github.com/ansible-collections/community.general/pull/1929).
|
||||||
- gem - add ``norc`` option to avoid loading any ``.gemrc`` file (https://github.com/ansible-collections/community.general/pull/2837).
|
- heroku_collaborator - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- github_repo - add new option ``api_url`` to allow working with on premises installations (https://github.com/ansible-collections/community.general/pull/3038).
|
- hiera lookup - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- gitlab_group - add new options ``project_creation_level``, ``auto_devops_enabled``, ``subgroup_creation_level`` (https://github.com/ansible-collections/community.general/pull/3248).
|
- homebrew_tap - add support to specify search path for ``brew`` executable (https://github.com/ansible-collections/community.general/issues/1702).
|
||||||
- gitlab_group - add new property ``require_two_factor_authentication`` (https://github.com/ansible-collections/community.general/pull/3367).
|
- ipa_config - add new options ``ipaconfigstring``, ``ipadefaultprimarygroup``, ``ipagroupsearchfields``, ``ipahomesrootdir``, ``ipabrkauthzdata``, ``ipamaxusernamelength``, ``ipapwdexpadvnotify``, ``ipasearchrecordslimit``, ``ipasearchtimelimit``, ``ipauserauthtype``, and ``ipausersearchfields`` (https://github.com/ansible-collections/community.general/pull/2116).
|
||||||
- gitlab_group_members - ``gitlab_user`` can now also be a list of users (https://github.com/ansible-collections/community.general/pull/3047).
|
- ipa_sudorule - add support for setting sudo runasuser (https://github.com/ansible-collections/community.general/pull/2031).
|
||||||
- gitlab_group_members - added functionality to set all members exactly as given (https://github.com/ansible-collections/community.general/pull/3047).
|
- ipa_user - fix ``userauthtype`` option to take in list of strings for the multi-select field instead of single string (https://github.com/ansible-collections/community.general/pull/2174).
|
||||||
- gitlab_project - add new options ``allow_merge_on_skipped_pipeline``, ``only_allow_merge_if_all_discussions_are_resolved``, ``only_allow_merge_if_pipeline_succeeds``, ``packages_enabled``, ``remove_source_branch_after_merge``, ``squash_option`` (https://github.com/ansible-collections/community.general/pull/3002).
|
- ipwcli_dns - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- gitlab_project - add new properties ``ci_config_path`` and ``shared_runners_enabled`` (https://github.com/ansible-collections/community.general/pull/3379).
|
- java_cert - change ``state: present`` to check certificates by hash, not just alias name (https://github.com/ansible/ansible/issues/43249).
|
||||||
- gitlab_project - projects can be created under other user's namespaces with the new ``username`` option (https://github.com/ansible-collections/community.general/pull/2824).
|
- java_keystore - add options ``certificate_path`` and ``private_key_path``, mutually exclusive with ``certificate`` and ``private_key`` respectively, and targetting files on remote hosts rather than their contents on the controller. (https://github.com/ansible-collections/community.general/issues/1669).
|
||||||
- gitlab_project_members - ``gitlab_user`` can now also be a list of users (https://github.com/ansible-collections/community.general/pull/3319).
|
- jenkins_job - add a ``validate_certs`` parameter that allows disabling TLS/SSL certificate validation (https://github.com/ansible-collections/community.general/issues/255).
|
||||||
- gitlab_project_members - added functionality to set all members exactly as given (https://github.com/ansible-collections/community.general/pull/3319).
|
- jira - added ``attach`` operation, which allows a user to attach a file to an issue (https://github.com/ansible-collections/community.general/pull/2192).
|
||||||
- gitlab_runner - support project-scoped gitlab.com runners registration (https://github.com/ansible-collections/community.general/pull/634).
|
- jira - added parameter ``account_id`` for compatibility with recent versions of JIRA (https://github.com/ansible-collections/community.general/issues/818, https://github.com/ansible-collections/community.general/pull/1978).
|
||||||
- gitlab_user - add ``expires_at`` option (https://github.com/ansible-collections/community.general/issues/2325).
|
- jira - revamped the module as a class using ``ModuleHelper`` (https://github.com/ansible-collections/community.general/pull/2208).
|
||||||
- gitlab_user - add functionality for adding external identity providers to a GitLab user (https://github.com/ansible-collections/community.general/pull/2691).
|
- keycloak_* modules - allow the keycloak modules to use a token for the authentication, the modules can take either a token or the credentials (https://github.com/ansible-collections/community.general/pull/2250).
|
||||||
- gitlab_user - allow to reset an existing password with the new ``reset_password`` option (https://github.com/ansible-collections/community.general/pull/2691).
|
- keycloak_client - elements of list parameters ``default_roles``, ``redirect_uris``, ``web_origins`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- gitlab_user - specifying a password is no longer necessary (https://github.com/ansible-collections/community.general/pull/2691).
|
- kibana_plugin - add parameter for passing ``--allow-root`` flag to kibana and kibana-plugin commands (https://github.com/ansible-collections/community.general/pull/2014).
|
||||||
- gunicorn - search for ``gunicorn`` binary in more paths (https://github.com/ansible-collections/community.general/pull/3092).
|
- known_hosts module utils - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- hana_query - added the abillity to use hdbuserstore (https://github.com/ansible-collections/community.general/pull/3125).
|
- librato_annotation - elements of list parameters ``links`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- hpilo_info - added ``host_power_status`` return value to report power state of machine with ``OFF``, ``ON`` or ``UNKNOWN`` (https://github.com/ansible-collections/community.general/pull/3079).
|
- linode_v4 - add support for ``private_ip`` option (https://github.com/ansible-collections/community.general/pull/2249).
|
||||||
- idrac_redfish_config - modified set_manager_attributes function to skip invalid attribute instead of returning. Added skipped attributes to output. Modified module exit to add warning variable (https://github.com/ansible-collections/community.general/issues/1995).
|
- linode_v4 - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- influxdb_retention_policy - add ``state`` parameter with allowed values ``present`` and ``absent`` to support deletion of existing retention policies (https://github.com/ansible-collections/community.general/issues/2383).
|
- lvol - added proper support for ``+-`` options when extending or reducing the logical volume (https://github.com/ansible-collections/community.general/issues/1988).
|
||||||
- influxdb_retention_policy - simplify duration logic parsing (https://github.com/ansible-collections/community.general/pull/2385).
|
- lxd_container - ``client_key`` and ``client_cert`` are now of type ``path`` and no longer ``str``. A side effect is that certain expansions are made, like ``~`` is replaced by the user's home directory, and environment variables like ``$HOME`` or ``$TEMP`` are evaluated (https://github.com/ansible-collections/community.general/pull/1741).
|
||||||
- ini_file - add abbility to define multiple options with the same name but different values (https://github.com/ansible-collections/community.general/issues/273, https://github.com/ansible-collections/community.general/issues/1204).
|
- lxd_container - elements of list parameter ``profiles`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- ini_file - add module option ``exclusive`` (boolean) for the ability to add/remove single ``option=value`` entries without overwriting existing options with the same name but different values (https://github.com/ansible-collections/community.general/pull/3033).
|
- lxd_profile - ``client_key`` and ``client_cert`` are now of type ``path`` and no longer ``str``. A side effect is that certain expansions are made, like ``~`` is replaced by the user's home directory, and environment variables like ``$HOME`` or ``$TEMP`` are evaluated (https://github.com/ansible-collections/community.general/pull/1741).
|
||||||
- ini_file - opening file with encoding ``utf-8-sig`` (https://github.com/ansible-collections/community.general/issues/2189).
|
- lxd_profile - added ``merge_profile`` parameter to merge configurations from the play to an existing profile (https://github.com/ansible-collections/community.general/pull/1813).
|
||||||
- interfaces_file - minor refactor (https://github.com/ansible-collections/community.general/pull/3328).
|
- mail - elements of list parameters ``to``, ``cc``, ``bcc``, ``attach``, ``headers`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- iocage connection - minor refactor to make lints and IDEs happy (https://github.com/ansible-collections/community.general/pull/2520).
|
- manageiq_alert_profiles - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- ipa_config - add ``ipaselinuxusermaporder`` option to set the SELinux user map order (https://github.com/ansible-collections/community.general/pull/3178).
|
- manageiq_policies - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- ipa_group - add ``append`` option for adding group and users members, instead of replacing the respective lists (https://github.com/ansible-collections/community.general/pull/3545).
|
- manageiq_tags - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- jail connection - minor refactor to make lints and IDEs happy (https://github.com/ansible-collections/community.general/pull/2520).
|
- manageiq_tags and manageiq_policies - added new parameter ``resource_id``. This parameter can be used instead of parameter ``resource_name`` (https://github.com/ansible-collections/community.general/pull/719).
|
||||||
- java_keystore - added ``ssl_backend`` parameter for using the cryptography library instead of the OpenSSL binary (https://github.com/ansible-collections/community.general/pull/2485).
|
- module_helper module utils - ``CmdMixin.run_command()`` now accepts ``dict`` command arguments, providing the parameter and its value (https://github.com/ansible-collections/community.general/pull/1867).
|
||||||
- java_keystore - replace envvar by stdin to pass secret to ``keytool`` (https://github.com/ansible-collections/community.general/pull/2526).
|
- module_helper module utils - added management of facts and adhoc setting of the initial value for variables (https://github.com/ansible-collections/community.general/pull/2188).
|
||||||
- jenkins_build - support stopping a running jenkins build (https://github.com/ansible-collections/community.general/pull/2850).
|
- module_helper module utils - added mechanism to manage variables, providing automatic output of variables, change status and diff information (https://github.com/ansible-collections/community.general/pull/2162).
|
||||||
- jenkins_job_info - the ``password`` and ``token`` parameters can also be omitted to retrieve only public information (https://github.com/ansible-collections/community.general/pull/2948).
|
- na_ontap_gather_facts - elements of list parameters ``gather_subset`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- jenkins_plugin - add fallback url(s) for failure of plugin installation/download (https://github.com/ansible-collections/community.general/pull/1334).
|
- nexmo - elements of list parameters ``dest`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- jira - add comment visibility parameter for comment operation (https://github.com/ansible-collections/community.general/pull/2556).
|
- nictagadm - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- kernel_blacklist - revamped the module using ``ModuleHelper`` (https://github.com/ansible-collections/community.general/pull/3329).
|
- nmcli - add ability to connect to a Wifi network and also to attach it to a master (bond) (https://github.com/ansible-collections/community.general/pull/2220).
|
||||||
- keycloak_* modules - refactor many of the ``keycloak_*`` modules to have similar structures, comments, and documentation (https://github.com/ansible-collections/community.general/pull/3280).
|
- nmcli - do not set IP configuration on slave connection (https://github.com/ansible-collections/community.general/pull/2223).
|
||||||
- keycloak_authentication - enhanced diff mode to also return before and after state when the authentication flow is updated (https://github.com/ansible-collections/community.general/pull/2963).
|
- nmcli - don't restrict the ability to manually set the MAC address to the bridge (https://github.com/ansible-collections/community.general/pull/2224).
|
||||||
- keycloak_client - add ``authentication_flow_binding_overrides`` option (https://github.com/ansible-collections/community.general/pull/2949).
|
- npm - add ``no_bin_links`` option (https://github.com/ansible-collections/community.general/issues/2128).
|
||||||
- keycloak_realm - add ``events_enabled`` parameter to allow activation or deactivation of login events (https://github.com/ansible-collections/community.general/pull/3231).
|
- nsupdate - elements of list parameters ``value`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- linode - added proper traceback when failing due to exceptions (https://github.com/ansible-collections/community.general/pull/2410).
|
- oci_vcn - ``api_user_key_file`` is now of type ``path`` and no longer ``str``. A side effect is that certain expansions are made, like ``~`` is replaced by the user's home directory, and environment variables like ``$HOME`` or ``$TEMP`` are evaluated (https://github.com/ansible-collections/community.general/pull/1741).
|
||||||
- linode - parameter ``additional_disks`` is now validated as a list of dictionaries (https://github.com/ansible-collections/community.general/pull/2410).
|
- omapi_host - elements of list parameters ``statements`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- linode inventory plugin - adds the ``ip_style`` configuration key. Set to ``api`` to get more detailed network details back from the remote Linode host (https://github.com/ansible-collections/community.general/pull/3203).
|
- one_host - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- lxc connection - minor refactor to make lints and IDEs happy (https://github.com/ansible-collections/community.general/pull/2520).
|
- one_image_info - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- lxd_container - add ``ignore_volatile_options`` option which allows to disable the behavior that the module ignores options starting with ``volatile.`` (https://github.com/ansible-collections/community.general/pull/3331).
|
- one_vm - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- mail - added the ``ehlohost`` parameter which allows for manual override of the host used in SMTP EHLO (https://github.com/ansible-collections/community.general/pull/3425).
|
- oneandone_firewall_policy - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- maven_artifact - added ``checksum_alg`` option to support SHA1 checksums in order to support FIPS systems (https://github.com/ansible-collections/community.general/pull/2662).
|
- oneandone_load_balancer - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- module_helper cmd module utils - added the ``ArgFormat`` style ``BOOLEAN_NOT``, to add CLI parameters when the module argument is false-ish (https://github.com/ansible-collections/community.general/pull/3290).
|
- oneandone_monitoring_policy - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- module_helper module utils - added feature flag parameter to ``CmdMixin`` to control whether ``cmd_args`` is automatically added to the module output (https://github.com/ansible-collections/community.general/pull/3648).
|
- oneandone_private_network - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- module_helper module utils - added feature flag parameters to ``CmdMixin`` to control whether ``rc``, ``out`` and ``err`` are automatically added to the module output (https://github.com/ansible-collections/community.general/pull/2922).
|
- oneandone_server - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- module_helper module utils - break down of the long file into smaller pieces (https://github.com/ansible-collections/community.general/pull/2393).
|
- onepassword_info - elements of list parameters ``search_terms`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- module_helper module utils - method ``CmdMixin.run_command()`` now accepts ``process_output`` specifying a function to process the outcome of the underlying ``module.run_command()`` (https://github.com/ansible-collections/community.general/pull/2564).
|
- oneview_datacenter_info - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- module_helper module_utils - added classmethod to trigger the execution of MH modules (https://github.com/ansible-collections/community.general/pull/3206).
|
- oneview_enclosure_info - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- nmcli - add ``disabled`` value to ``method6`` option (https://github.com/ansible-collections/community.general/issues/2730).
|
- oneview_ethernet_network_info - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- nmcli - add ``dummy`` interface support (https://github.com/ansible-collections/community.general/issues/724).
|
- oneview_network_set_info - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- nmcli - add ``gre`` tunnel support (https://github.com/ansible-collections/community.general/issues/3105, https://github.com/ansible-collections/community.general/pull/3262).
|
- ovh_ip_failover - removed unreachable code (https://github.com/ansible-collections/community.general/pull/2157).
|
||||||
- nmcli - add ``gsm`` support (https://github.com/ansible-collections/community.general/pull/3313).
|
- packet_device - elements of list parameters ``device_ids``, ``hostnames`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- nmcli - add ``routing_rules4`` and ``may_fail4`` options (https://github.com/ansible-collections/community.general/issues/2730).
|
- pagerduty - elements of list parameters ``service`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- nmcli - add ``runner`` and ``runner_hwaddr_policy`` options (https://github.com/ansible-collections/community.general/issues/2901).
|
- pids - new options ``pattern`` and `ignore_case`` for retrieving PIDs of processes matching a supplied pattern (https://github.com/ansible-collections/community.general/pull/2280).
|
||||||
- nmcli - add ``wifi-sec`` option change detection to support managing secure Wi-Fi connections (https://github.com/ansible-collections/community.general/pull/3136).
|
- plugins/module_utils/oracle/oci_utils.py - elements of list parameter ``key_by`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- nmcli - add ``wifi`` option to support managing Wi-Fi settings such as ``hidden`` or ``mode`` (https://github.com/ansible-collections/community.general/pull/3081).
|
- profitbricks - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- nmcli - add new options to ignore automatic DNS servers and gateways (https://github.com/ansible-collections/community.general/issues/1087).
|
- profitbricks_volume - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- nmcli - query ``nmcli`` directly to determine available WiFi options (https://github.com/ansible-collections/community.general/pull/3141).
|
- proxmox - added ``purge`` module parameter for use when deleting lxc's with HA options (https://github.com/ansible-collections/community.general/pull/2013).
|
||||||
- nmcli - remove dead code, ``options`` never contains keys from ``param_alias`` (https://github.com/ansible-collections/community.general/pull/2417).
|
- proxmox inventory plugin - added ``Constructable`` class to the inventory to provide options ``strict``, ``keyed_groups``, ``groups``, and ``compose`` (https://github.com/ansible-collections/community.general/pull/2180).
|
||||||
- nmcli - the option ``routing_rules4`` can now be specified as a list of strings, instead of as a single string (https://github.com/ansible-collections/community.general/issues/3401).
|
- proxmox inventory plugin - added ``proxmox_agent_interfaces`` fact describing network interfaces returned from a QEMU guest agent (https://github.com/ansible-collections/community.general/pull/2148).
|
||||||
- nrdp callback plugin - parameters are now converted to strings, except ``validate_certs`` which is converted to boolean (https://github.com/ansible-collections/community.general/pull/2878).
|
- proxmox inventory plugin - added ``tags_parsed`` fact containing tags parsed as a list (https://github.com/ansible-collections/community.general/pull/1949).
|
||||||
- onepassword lookup plugin - add ``domain`` option (https://github.com/ansible-collections/community.general/issues/2734).
|
- proxmox inventory plugin - allow to select whether ``ansible_host`` should be set for the proxmox nodes (https://github.com/ansible-collections/community.general/pull/2263).
|
||||||
- open-iscsi - adding support for mutual authentication between target and initiator (https://github.com/ansible-collections/community.general/pull/3422).
|
- proxmox_kvm - added new module parameter ``tags`` for use with PVE 6+ (https://github.com/ansible-collections/community.general/pull/2000).
|
||||||
- open_iscsi - add ``auto_portal_startup`` parameter to allow ``node.startup`` setting per portal (https://github.com/ansible-collections/community.general/issues/2685).
|
- proxmox_kvm module - actually implemented ``vmid`` and ``status`` return values. Updated documentation to reflect current situation (https://github.com/ansible-collections/community.general/issues/1410, https://github.com/ansible-collections/community.general/pull/1715).
|
||||||
- open_iscsi - also consider ``portal`` and ``port`` to check if already logged in or not (https://github.com/ansible-collections/community.general/issues/2683).
|
- pubnub_blocks - elements of list parameters ``event_handlers`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- open_iscsi - minor refactoring (https://github.com/ansible-collections/community.general/pull/3286).
|
- rax - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/2006).
|
||||||
- opentelemetry callback plugin - added option ``enable_from_environment`` to support enabling the plugin only if the given environment variable exists and it is set to true (https://github.com/ansible-collections/community.general/pull/3498).
|
- rax_cdb_user - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/2006).
|
||||||
- opentelemetry callback plugin - enriched the span attributes with HTTP metadata for those Ansible tasks that interact with third party systems (https://github.com/ansible-collections/community.general/pull/3448).
|
- rax_scaling_group - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/2006).
|
||||||
- opentelemetry callback plugin - enriched the stacktrace information for loops with the ``message``, ``exception`` and ``stderr`` fields from the failed item in the tasks in addition to the name of the task and failed item (https://github.com/ansible-collections/community.general/pull/3599).
|
- read_csv - refactored read_csv module to use shared csv functions from csv module_utils (https://github.com/ansible-collections/community.general/pull/2037).
|
||||||
- opentelemetry callback plugin - enriched the stacktrace information with the ``message``, ``exception`` and ``stderr`` fields from the failed task (https://github.com/ansible-collections/community.general/pull/3496).
|
- redfish modules - explicitly setting lists' elements to ``str`` (https://github.com/ansible-collections/community.general/pull/1761).
|
||||||
- opentelemetry callback plugin - transformed args in a list of span attributes in addition it redacted username and password from any URLs (https://github.com/ansible-collections/community.general/pull/3564).
|
- redfish_* modules, redfish_utils module utils - add support for Redfish session create, delete, and authenticate (https://github.com/ansible-collections/community.general/issues/1975).
|
||||||
- openwrt_init - minor refactoring (https://github.com/ansible-collections/community.general/pull/3284).
|
- redfish_config - case insensitive search for situations where the hostname/FQDN case on iLO doesn't match variable's case (https://github.com/ansible-collections/community.general/pull/1744).
|
||||||
- opkg - allow ``name`` to be a YAML list of strings (https://github.com/ansible-collections/community.general/issues/572, https://github.com/ansible-collections/community.general/pull/3554).
|
- redhat_subscription - elements of list parameters ``pool_ids``, ``addons`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- pacman - add ``executable`` option to use an alternative pacman binary (https://github.com/ansible-collections/community.general/issues/2524).
|
- rhevm - removed unreachable code (https://github.com/ansible-collections/community.general/pull/2157).
|
||||||
- pacman - speed up checking if the package is installed, when the latest version check is not needed (https://github.com/ansible-collections/community.general/pull/3606).
|
- rocketchat - elements of list parameters ``attachments`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- pamd - minor refactorings (https://github.com/ansible-collections/community.general/pull/3285).
|
- scaleway_compute - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- passwordstore lookup - add option ``missing`` to choose what to do if the password file is missing (https://github.com/ansible-collections/community.general/pull/2500).
|
- scaleway_lb - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- pids - refactor to add support for older ``psutil`` versions to the ``pattern`` option (https://github.com/ansible-collections/community.general/pull/3315).
|
- sendgrid - elements of list parameters ``to_addresses``, ``cc``, ``bcc``, ``attachments`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- pipx - minor refactor on the ``changed`` logic (https://github.com/ansible-collections/community.general/pull/3647).
|
- sensu_check - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- pkgin - in case of ``pkgin`` tool failue, display returned standard output ``stdout`` and standard error ``stderr`` to ease debugging (https://github.com/ansible-collections/community.general/issues/3146).
|
- sensu_client - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- pkgng - ``annotation`` can now also be a YAML list (https://github.com/ansible-collections/community.general/pull/3526).
|
- sensu_handler - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- pkgng - packages being installed (or upgraded) are acted on in one command (per action) (https://github.com/ansible-collections/community.general/issues/2265).
|
- sl_vm - elements of list parameters ``disks``, ``ssh_keys`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- pkgng - status message specifies number of packages installed and/or upgraded separately. Previously, all changes were reported as one count of packages "added" (https://github.com/ansible-collections/community.general/pull/3393).
|
- slack - elements of list parameters ``attachments`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- proxmox inventory plugin - added snapshots to host facts (https://github.com/ansible-collections/community.general/pull/3044).
|
- smartos_image_info - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- proxmox_group_info - minor refactor (https://github.com/ansible-collections/community.general/pull/2557).
|
- snmp_facts - added parameters ``timeout`` and ``retries`` to module (https://github.com/ansible-collections/community.general/issues/980).
|
||||||
- proxmox_kvm - minor refactor (https://github.com/ansible-collections/community.general/pull/2557).
|
- statusio_maintenance - elements of list parameters ``components``, ``containers`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- qubes connection - minor refactor to make lints and IDEs happy (https://github.com/ansible-collections/community.general/pull/2520).
|
- svr4pkg - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- rax_mon_notification_plan - fixed validation checks by specifying type ``str`` as the ``elements`` of parameters ``ok_state``, ``warning_state`` and ``critical_state`` (https://github.com/ansible-collections/community.general/pull/2955).
|
- terraform - add ``plugin_paths`` parameter which allows disabling Terraform from performing plugin discovery and auto-download (https://github.com/ansible-collections/community.general/pull/2308).
|
||||||
- redfish_command - add ``boot_override_mode`` argument to BootSourceOverride commands (https://github.com/ansible-collections/community.general/issues/3134).
|
- timezone - add Gentoo and Alpine Linux support (https://github.com/ansible-collections/community.general/issues/781).
|
||||||
- redfish_command and redfish_config and redfish_utils module utils - add parameter to strip etag of quotes before patch, since some vendors do not properly ``If-Match`` etag with quotes (https://github.com/ansible-collections/community.general/pull/3296).
|
- twilio - elements of list parameters ``to_numbers`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- redfish_config - modified module exit to add warning variable (https://github.com/ansible-collections/community.general/issues/1995).
|
- udm_dns_zone - elements of list parameters ``nameserver``, ``interfaces``, and ``mx`` are now validated (https://github.com/ansible-collections/community.general/pull/2268).
|
||||||
- redfish_info - include ``Status`` property for Thermal objects when querying Thermal properties via ``GetChassisThermals`` command (https://github.com/ansible-collections/community.general/issues/3232).
|
- vdo - add ``force`` option (https://github.com/ansible-collections/community.general/issues/2101).
|
||||||
- redfish_utils module utils - modified set_bios_attributes function to skip invalid attribute instead of returning. Added skipped attributes to output (https://github.com/ansible-collections/community.general/issues/1995).
|
- vmadm - elements of list parameters ``disks``, ``nics``, ``resolvers``, ``filesystems`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- redhat_subscription - add ``server_prefix`` and ``server_port`` parameters (https://github.com/ansible-collections/community.general/pull/2779).
|
- webfaction_domain - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- redis - allow to use the term ``replica`` instead of ``slave``, which has been the official Redis terminology since 2018 (https://github.com/ansible-collections/community.general/pull/2867).
|
- webfaction_site - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/1885).
|
||||||
- rhevm - minor refactor (https://github.com/ansible-collections/community.general/pull/2557).
|
- xattr - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- saltstack connection - minor refactor to make lints and IDEs happy (https://github.com/ansible-collections/community.general/pull/2520).
|
- xfconf - added option ``disable_facts`` to disable facts and its associated deprecation warning (https://github.com/ansible-collections/community.general/issues/1475).
|
||||||
- scaleway plugin inventory - parse scw-cli config file for ``oauth_token`` (https://github.com/ansible-collections/community.general/pull/3250).
|
- xfconf - changed implementation to use ``ModuleHelper`` new features (https://github.com/ansible-collections/community.general/pull/2188).
|
||||||
- serverless - minor refactor (https://github.com/ansible-collections/community.general/pull/2557).
|
- xml - elements of list parameters ``add_children``, ``set_children`` are now validated (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- slack - minor refactoring (https://github.com/ansible-collections/community.general/pull/3205).
|
- yum_versionlock - Do the lock/unlock concurrently to speed up (https://github.com/ansible-collections/community.general/pull/1912).
|
||||||
- snap - added ``enabled`` and ``disabled`` states (https://github.com/ansible-collections/community.general/issues/1990).
|
- zfs_facts - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- snap - improved module error handling, especially for the case when snap server is down (https://github.com/ansible-collections/community.general/issues/2970).
|
- zpool_facts - minor refactor converting multiple statements to a single list literal (https://github.com/ansible-collections/community.general/pull/2160).
|
||||||
- splunk callback plugin - add ``batch`` option for user-configurable correlation ID's (https://github.com/ansible-collections/community.general/issues/2790).
|
|
||||||
- spotinst_aws_elastigroup - elements of list parameters are now validated (https://github.com/ansible-collections/community.general/pull/2355).
|
|
||||||
- ssh_config - new feature to set ``ForwardAgent`` option to ``yes`` or ``no`` (https://github.com/ansible-collections/community.general/issues/2473).
|
|
||||||
- stacki_host - minor refactoring (https://github.com/ansible-collections/community.general/pull/2681).
|
|
||||||
- supervisorctl - add the possibility to restart all programs and program groups (https://github.com/ansible-collections/community.general/issues/3551).
|
|
||||||
- supervisorctl - using standard Ansible mechanism to validate ``signalled`` state required parameter (https://github.com/ansible-collections/community.general/pull/3068).
|
|
||||||
- terraform - add ``check_destroy`` optional parameter to check for deletion of resources before it is applied (https://github.com/ansible-collections/community.general/pull/2874).
|
|
||||||
- terraform - add ``parallelism`` parameter (https://github.com/ansible-collections/community.general/pull/3540).
|
|
||||||
- terraform - add option ``overwrite_init`` to skip init if exists (https://github.com/ansible-collections/community.general/pull/2573).
|
|
||||||
- terraform - minor refactor (https://github.com/ansible-collections/community.general/pull/2557).
|
|
||||||
- timezone - print error message to debug instead of warning when timedatectl fails (https://github.com/ansible-collections/community.general/issues/1942).
|
|
||||||
- tss lookup plugin - added ``token`` parameter for token authorization; ``username`` and ``password`` are optional when ``token`` is provided (https://github.com/ansible-collections/community.general/pull/3327).
|
|
||||||
- tss lookup plugin - added new parameter for domain authorization (https://github.com/ansible-collections/community.general/pull/3228).
|
|
||||||
- tss lookup plugin - refactored to decouple the supporting third-party library (``python-tss-sdk``) (https://github.com/ansible-collections/community.general/pull/3252).
|
|
||||||
- ufw - if ``delete=true`` and ``insert`` option is present, then ``insert`` is now ignored rather than failing with a syntax error (https://github.com/ansible-collections/community.general/pull/3514).
|
|
||||||
- vdo - minor refactoring of the code (https://github.com/ansible-collections/community.general/pull/3191).
|
|
||||||
- zfs - added diff mode support (https://github.com/ansible-collections/community.general/pull/502).
|
|
||||||
- zfs_delegate_admin - drop choices from permissions, allowing any permission supported by the underlying zfs commands (https://github.com/ansible-collections/community.general/pull/2540).
|
|
||||||
- zone connection - minor refactor to make lints and IDEs happy (https://github.com/ansible-collections/community.general/pull/2520).
|
|
||||||
- zpool_facts - minor refactoring (https://github.com/ansible-collections/community.general/pull/3332).
|
|
||||||
- zypper - prefix zypper commands with ``/sbin/transactional-update --continue --drop-if-no-change --quiet run`` if transactional updates are detected (https://github.com/ansible-collections/community.general/issues/3159).
|
|
||||||
|
|
||||||
Breaking Changes / Porting Guide
|
Breaking Changes / Porting Guide
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
- archive - adding idempotency checks for changes to file names and content within the ``destination`` file (https://github.com/ansible-collections/community.general/pull/3075).
|
- If you use Ansible 2.9 and these plugins or modules from this collection, community.general 3.0.0 results in errors when trying to use the DellEMC content by FQCN, like ``community.general.idrac_firmware``.
|
||||||
- lxd inventory plugin - when used with Python 2, the plugin now needs ``ipaddress`` installed `from pypi <https://pypi.org/project/ipaddress/>`_ (https://github.com/ansible-collections/community.general/pull/2441).
|
Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``dellemc.openmanage.idrac_firmware`` for the previous example) and to make sure that you have ``dellemc.openmanage`` installed.
|
||||||
- scaleway_security_group_rule - when used with Python 2, the module now needs ``ipaddress`` installed `from pypi <https://pypi.org/project/ipaddress/>`_ (https://github.com/ansible-collections/community.general/pull/2441).
|
|
||||||
|
If you use ansible-base 2.10 or newer and did not install Ansible 4.0.0, but installed (and/or upgraded) community.general manually, you need to make sure to also install the ``dellemc.openmanage`` collection if you are using any of these plugins or modules.
|
||||||
|
While ansible-base 2.10 or newer can use the redirects that community.general 3.0.0 adds, the collection they point to (such as dellemc.openmanage) must be installed for them to work.
|
||||||
|
- gitlab_deploy_key - if for an already existing key title a different public key was given as parameter nothing happened, now this changed so that the public key is updated to the new value (https://github.com/ansible-collections/community.general/pull/1661).
|
||||||
|
- java_keystore - instead of failing, now overwrites keystore if the alias (name) is changed. This was originally the intended behavior, but did not work due to a logic error. Make sure that your playbooks and roles do not depend on the old behavior of failing instead of overwriting (https://github.com/ansible-collections/community.general/issues/1671).
|
||||||
|
- java_keystore - instead of failing, now overwrites keystore if the passphrase is changed. Make sure that your playbooks and roles do not depend on the old behavior of failing instead of overwriting (https://github.com/ansible-collections/community.general/issues/1671).
|
||||||
|
- one_image - use pyone instead of python-oca (https://github.com/ansible-collections/community.general/pull/2032).
|
||||||
|
- utm_proxy_auth_profile - the ``frontend_cookie_secret`` return value now contains a placeholder string instead of the module's ``frontend_cookie_secret`` parameter (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
|
||||||
Deprecated Features
|
Deprecated Features
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
- ali_instance_info - marked removal version of deprecated parameters ``availability_zone`` and ``instance_names`` (https://github.com/ansible-collections/community.general/issues/2429).
|
- apt_rpm - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
- bitbucket_* modules - ``username`` options have been deprecated in favor of ``workspace`` and will be removed in community.general 6.0.0 (https://github.com/ansible-collections/community.general/pull/2045).
|
- composer - deprecated invalid parameter aliases ``working-dir``, ``global-command``, ``prefer-source``, ``prefer-dist``, ``no-dev``, ``no-scripts``, ``no-plugins``, ``optimize-autoloader``, ``classmap-authoritative``, ``apcu-autoloader``, ``ignore-platform-reqs``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
- dnsimple - python-dnsimple < 2.0.0 is deprecated and support for it will be removed in community.general 5.0.0 (https://github.com/ansible-collections/community.general/pull/2946#discussion_r667624693).
|
- cpanm - parameter ``system_lib`` deprecated in favor of using ``become`` (https://github.com/ansible-collections/community.general/pull/2218).
|
||||||
- gitlab_group_members - setting ``gitlab_group`` to ``name`` or ``path`` is deprecated. Use ``full_path`` instead (https://github.com/ansible-collections/community.general/pull/3451).
|
- github_deploy_key - deprecated invalid parameter alias ``2fa_token``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
- keycloak_authentication - the return value ``flow`` is now deprecated and will be removed in community.general 6.0.0; use ``end_state`` instead (https://github.com/ansible-collections/community.general/pull/3280).
|
- grove - the option ``message`` will be removed in community.general 4.0.0. Use the new option ``message_content`` instead (https://github.com/ansible-collections/community.general/pull/1929).
|
||||||
- keycloak_group - the return value ``group`` is now deprecated and will be removed in community.general 6.0.0; use ``end_state`` instead (https://github.com/ansible-collections/community.general/pull/3280).
|
- homebrew - deprecated invalid parameter alias ``update-brew``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
- linode - parameter ``backupsenabled`` is deprecated and will be removed in community.general 5.0.0 (https://github.com/ansible-collections/community.general/pull/2410).
|
- homebrew_cask - deprecated invalid parameter alias ``update-brew``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
- lxd_container - the current default value ``true`` of ``ignore_volatile_options`` is deprecated and will change to ``false`` in community.general 6.0.0 (https://github.com/ansible-collections/community.general/pull/3429).
|
- opkg - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
- serverless - deprecating parameter ``functions`` because it was not used in the code (https://github.com/ansible-collections/community.general/pull/2845).
|
- pacman - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
- xfconf - deprecate the ``get`` state. The new module ``xfconf_info`` should be used instead (https://github.com/ansible-collections/community.general/pull/3049).
|
- puppet - deprecated undocumented parameter ``show_diff``, will be removed in 7.0.0. (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
|
- runit - unused parameter ``dist`` marked for deprecation (https://github.com/ansible-collections/community.general/pull/1830).
|
||||||
|
- slackpkg - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
|
- urmpi - deprecated invalid parameter aliases ``update-cache`` and ``no-recommends``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
|
- xbps - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927).
|
||||||
|
- xfconf - returning output as facts is deprecated, this will be removed in community.general 4.0.0. Please register the task output in a variable and use it instead. You can already switch to the new behavior now by using the new ``disable_facts`` option (https://github.com/ansible-collections/community.general/pull/1747).
|
||||||
|
|
||||||
Removed Features (previously deprecated)
|
Removed Features (previously deprecated)
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
- All inventory and vault scripts contained in community.general were moved to the `contrib-scripts GitHub repository <https://github.com/ansible-community/contrib-scripts>`_ (https://github.com/ansible-collections/community.general/pull/2696).
|
- The ``ome_device_info``, ``idrac_firmware`` and ``idrac_server_config_profile`` modules have now been migrated from community.general to the `dellemc.openmanage <https://galaxy.ansible.com/dellemc/openmanage>`_ Ansible collection.
|
||||||
- ModuleHelper module utils - remove fallback when value could not be determined for a parameter (https://github.com/ansible-collections/community.general/pull/3461).
|
If you use ansible-base 2.10 or newer, redirections have been provided.
|
||||||
- Removed deprecated netapp module utils and doc fragments (https://github.com/ansible-collections/community.general/pull/3197).
|
|
||||||
- The nios, nios_next_ip, nios_next_network lookup plugins, the nios documentation fragment, and the nios_host_record, nios_ptr_record, nios_mx_record, nios_fixed_address, nios_zone, nios_member, nios_a_record, nios_aaaa_record, nios_network, nios_dns_view, nios_txt_record, nios_naptr_record, nios_srv_record, nios_cname_record, nios_nsgroup, and nios_network_view module have been removed from community.general 4.0.0 and were replaced by redirects to the `infoblox.nios_modules <https://galaxy.ansible.com/infoblox/nios_modules>`_ collection. Please install the ``infoblox.nios_modules`` collection to continue using these plugins and modules, and update your FQCNs (https://github.com/ansible-collections/community.general/pull/3592).
|
If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.general.idrac_firmware`` → ``dellemc.openmanage.idrac_firmware``) and make sure to install the dellemc.openmanage collection.
|
||||||
- The vendored copy of ``ipaddress`` has been removed. Please use ``ipaddress`` from the Python 3 standard library, or `from pypi <https://pypi.org/project/ipaddress/>`_. (https://github.com/ansible-collections/community.general/pull/2441).
|
- The deprecated ali_instance_facts module has been removed. Use ali_instance_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
- cpanm - removed the deprecated ``system_lib`` option. Use Ansible's privilege escalation mechanism instead; the option basically used ``sudo`` (https://github.com/ansible-collections/community.general/pull/3461).
|
- The deprecated gluster_heal_info module has been removed. Use gluster.gluster.gluster_heal_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
- grove - removed the deprecated alias ``message`` of the ``message_content`` option (https://github.com/ansible-collections/community.general/pull/3461).
|
- The deprecated gluster_peer module has been removed. Use gluster.gluster.gluster_peer instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
- proxmox - default value of ``proxmox_default_behavior`` changed to ``no_defaults`` (https://github.com/ansible-collections/community.general/pull/3461).
|
- The deprecated gluster_volume module has been removed. Use gluster.gluster.gluster_volume instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
- proxmox_kvm - default value of ``proxmox_default_behavior`` changed to ``no_defaults`` (https://github.com/ansible-collections/community.general/pull/3461).
|
- The deprecated helm module has been removed. Use community.kubernetes.helm instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
- runit - removed the deprecated ``dist`` option which was not used by the module (https://github.com/ansible-collections/community.general/pull/3461).
|
- The deprecated hpilo_facts module has been removed. Use hpilo_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
- telegram - removed the deprecated ``msg``, ``msg_format`` and ``chat_id`` options (https://github.com/ansible-collections/community.general/pull/3461).
|
- The deprecated idrac_redfish_facts module has been removed. Use idrac_redfish_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
- xfconf - the default value of ``disable_facts`` changed to ``true``, and the value ``false`` is no longer allowed. Register the module results instead (https://github.com/ansible-collections/community.general/pull/3461).
|
- The deprecated jenkins_job_facts module has been removed. Use jenkins_job_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ldap_attr module has been removed. Use ldap_attrs instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated memset_memstore_facts module has been removed. Use memset_memstore_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated memset_server_facts module has been removed. Use memset_server_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated na_ontap_gather_facts module has been removed. Use netapp.ontap.na_ontap_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated nginx_status_facts module has been removed. Use nginx_status_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated one_image_facts module has been removed. Use one_image_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated onepassword_facts module has been removed. Use onepassword_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated oneview_datacenter_facts module has been removed. Use oneview_datacenter_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated oneview_enclosure_facts module has been removed. Use oneview_enclosure_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated oneview_ethernet_network_facts module has been removed. Use oneview_ethernet_network_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated oneview_fc_network_facts module has been removed. Use oneview_fc_network_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated oneview_fcoe_network_facts module has been removed. Use oneview_fcoe_network_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated oneview_logical_interconnect_group_facts module has been removed. Use oneview_logical_interconnect_group_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated oneview_network_set_facts module has been removed. Use oneview_network_set_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated oneview_san_manager_facts module has been removed. Use oneview_san_manager_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated online_server_facts module has been removed. Use online_server_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated online_user_facts module has been removed. Use online_user_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt module has been removed. Use ovirt.ovirt.ovirt_vm instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_affinity_label_facts module has been removed. Use ovirt.ovirt.ovirt_affinity_label_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_api_facts module has been removed. Use ovirt.ovirt.ovirt_api_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_cluster_facts module has been removed. Use ovirt.ovirt.ovirt_cluster_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_datacenter_facts module has been removed. Use ovirt.ovirt.ovirt_datacenter_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_disk_facts module has been removed. Use ovirt.ovirt.ovirt_disk_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_event_facts module has been removed. Use ovirt.ovirt.ovirt_event_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_external_provider_facts module has been removed. Use ovirt.ovirt.ovirt_external_provider_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_group_facts module has been removed. Use ovirt.ovirt.ovirt_group_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_host_facts module has been removed. Use ovirt.ovirt.ovirt_host_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_host_storage_facts module has been removed. Use ovirt.ovirt.ovirt_host_storage_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_network_facts module has been removed. Use ovirt.ovirt.ovirt_network_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_nic_facts module has been removed. Use ovirt.ovirt.ovirt_nic_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_permission_facts module has been removed. Use ovirt.ovirt.ovirt_permission_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_quota_facts module has been removed. Use ovirt.ovirt.ovirt_quota_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_scheduling_policy_facts module has been removed. Use ovirt.ovirt.ovirt_scheduling_policy_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_snapshot_facts module has been removed. Use ovirt.ovirt.ovirt_snapshot_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_storage_domain_facts module has been removed. Use ovirt.ovirt.ovirt_storage_domain_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_storage_template_facts module has been removed. Use ovirt.ovirt.ovirt_storage_template_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_storage_vm_facts module has been removed. Use ovirt.ovirt.ovirt_storage_vm_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_tag_facts module has been removed. Use ovirt.ovirt.ovirt_tag_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_template_facts module has been removed. Use ovirt.ovirt.ovirt_template_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_user_facts module has been removed. Use ovirt.ovirt.ovirt_user_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_vm_facts module has been removed. Use ovirt.ovirt.ovirt_vm_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated ovirt_vmpool_facts module has been removed. Use ovirt.ovirt.ovirt_vmpool_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated purefa_facts module has been removed. Use purestorage.flasharray.purefa_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated purefb_facts module has been removed. Use purestorage.flasharray.purefb_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated python_requirements_facts module has been removed. Use python_requirements_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated redfish_facts module has been removed. Use redfish_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated scaleway_image_facts module has been removed. Use scaleway_image_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated scaleway_ip_facts module has been removed. Use scaleway_ip_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated scaleway_organization_facts module has been removed. Use scaleway_organization_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated scaleway_security_group_facts module has been removed. Use scaleway_security_group_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated scaleway_server_facts module has been removed. Use scaleway_server_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated scaleway_snapshot_facts module has been removed. Use scaleway_snapshot_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated scaleway_volume_facts module has been removed. Use scaleway_volume_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated smartos_image_facts module has been removed. Use smartos_image_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated vertica_facts module has been removed. Use vertica_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The deprecated xenserver_guest_facts module has been removed. Use xenserver_guest_info instead (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- The ovirt_facts docs fragment has been removed (https://github.com/ansible-collections/community.general/pull/1924).
|
||||||
|
- airbrake_deployment - removed deprecated ``token`` parameter. Use ``project_id`` and ``project_key`` instead (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- bigpanda - the alias ``message`` has been removed. Use ``deployment_message`` instead (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- cisco_spark, cisco_webex - the alias ``message`` has been removed. Use ``msg`` instead (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- clc_aa_policy - the ``wait`` parameter has been removed. It did not have any effect (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- datadog_monitor - the alias ``message`` has been removed. Use ``notification_message`` instead (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- django_manage - the parameter ``liveserver`` has been removed (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- idrac_redfish_config - the parameters ``manager_attribute_name`` and ``manager_attribute_value`` have been removed. Use ``manager_attributes`` instead (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- iso_extract - the alias ``thirsty`` has been removed. Use ``force`` instead (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- ldap_entry - the ``params`` parameter is now completely removed. Using it already triggered an error since community.general 0.1.2 (https://github.com/ansible-collections/community.general/pull/2257).
|
||||||
|
- pulp_repo - the ``feed_client_cert`` parameter no longer defaults to the value of the ``client_cert`` parameter (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- pulp_repo - the ``feed_client_key`` parameter no longer defaults to the value of the ``client_key`` parameter (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- pulp_repo - the alias ``ca_cert`` has been removed. Use ``feed_ca_cert`` instead (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- rax - unused parameter ``service`` removed (https://github.com/ansible-collections/community.general/pull/2020).
|
||||||
|
- redfish modules - issuing a data modification command without specifying the ID of the target System, Chassis or Manager resource when there is more than one is no longer allowed. Use the ``resource_id`` option to specify the target ID (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- redfish_config - the parameters ``bios_attribute_name`` and ``bios_attribute_value`` have been removed. Use ``bios_attributes`` instead (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- syspatch - the ``apply`` parameter has been removed. This is the default mode, so simply removing it will not change the behavior (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
- xbps - the ``force`` parameter has been removed. It did not have any effect (https://github.com/ansible-collections/community.general/pull/1926).
|
||||||
|
|
||||||
Security Fixes
|
Security Fixes
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
- nmcli - do not pass WiFi secrets on the ``nmcli`` command line. Use ``nmcli con edit`` instead and pass secrets as ``stdin`` (https://github.com/ansible-collections/community.general/issues/3145).
|
- dnsmadeeasy - mark the ``account_key`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- gitlab_runner - mark the ``registration_token`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- hwc_ecs_instance - mark the ``admin_pass`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- ibm_sa_host - mark the ``iscsi_chap_secret`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- java_cert - remove password from ``run_command`` arguments (https://github.com/ansible-collections/community.general/pull/2008).
|
||||||
|
- java_keystore - pass secret to keytool through an environment variable to not expose it as a commandline argument (https://github.com/ansible-collections/community.general/issues/1668).
|
||||||
|
- keycloak_* modules - mark the ``auth_client_secret`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- keycloak_client - mark the ``registration_access_token`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- librato_annotation - mark the ``api_key`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- logentries_msg - mark the ``token`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- module_utils/_netapp, na_ontap_gather_facts - enabled ``no_log`` for the options ``api_key`` and ``secret_key`` to prevent accidental disclosure (CVE-2021-20191, https://github.com/ansible-collections/community.general/pull/1725).
|
||||||
|
- module_utils/identity/keycloak, keycloak_client, keycloak_clienttemplate, keycloak_group - enabled ``no_log`` for the option ``auth_client_secret`` to prevent accidental disclosure (CVE-2021-20191, https://github.com/ansible-collections/community.general/pull/1725).
|
||||||
|
- nios_nsgroup - mark the ``tsig_key`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- oneandone_firewall_policy, oneandone_load_balancer, oneandone_monitoring_policy, oneandone_private_network, oneandone_public_ip - mark the ``auth_token`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- ovirt - mark the ``instance_key`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- ovirt - mark the ``instance_rootpw`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- pagerduty_alert - mark the ``api_key``, ``service_key`` and ``integration_key`` parameters as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- pagerduty_change - mark the ``integration_key`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- pingdom - mark the ``key`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- pulp_repo - mark the ``feed_client_key`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- rax_clb_ssl - mark the ``private_key`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- redfish_command - mark the ``update_creds.password`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- rollbar_deployment - mark the ``token`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- spotinst_aws_elastigroup - mark the ``multai_token`` and ``token`` parameters as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- stackdriver - mark the ``key`` parameter as ``no_log`` to avoid leakage of secrets (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
- utm_proxy_auth_profile - enabled ``no_log`` for the option ``frontend_cookie_secret`` to prevent accidental disclosure (CVE-2021-20191, https://github.com/ansible-collections/community.general/pull/1725).
|
||||||
|
- utm_proxy_auth_profile - mark the ``frontend_cookie_secret`` parameter as ``no_log`` to avoid leakage of secrets. This causes the ``utm_proxy_auth_profile`` return value to no longer containing the correct value, but a placeholder (https://github.com/ansible-collections/community.general/pull/1736).
|
||||||
|
|
||||||
Bugfixes
|
Bugfixes
|
||||||
--------
|
--------
|
||||||
|
|
||||||
- _mount module utils - fixed the sanity checks (https://github.com/ansible-collections/community.general/pull/2883).
|
- Mark various module options with ``no_log=False`` which have a name that potentially could leak secrets, but which do not (https://github.com/ansible-collections/community.general/pull/2001).
|
||||||
- ali_instance_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- aerospike_migration - fix typo that caused ``migrate_tx_key`` instead of ``migrate_rx_key`` being used (https://github.com/ansible-collections/community.general/pull/1739).
|
||||||
- ansible_galaxy_install - the output value ``cmd_args`` was bringing the intermediate command used to gather the state, instead of the command that actually performed the state change (https://github.com/ansible-collections/community.general/pull/3655).
|
- alternatives - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- apache2_module - fix ``a2enmod``/``a2dismod`` detection, and error message when not found (https://github.com/ansible-collections/community.general/issues/3253).
|
- beadm - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- archive - fixed ``exclude_path`` values causing incorrect archive root (https://github.com/ansible-collections/community.general/pull/2816).
|
- bigpanda - actually use the ``deployment_message`` option (https://github.com/ansible-collections/community.general/pull/1928).
|
||||||
- archive - fixed improper file names for single file zip archives (https://github.com/ansible-collections/community.general/issues/2818).
|
- chef_databag lookup plugin - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- archive - fixed incorrect ``state`` result value documentation (https://github.com/ansible-collections/community.general/pull/2816).
|
- cloudforms inventory - fixed issue that non-existing (archived) VMs were synced (https://github.com/ansible-collections/community.general/pull/720).
|
||||||
- archive - fixed task failure when using the ``remove`` option with a ``path`` containing nested files for ``format``s other than ``zip`` (https://github.com/ansible-collections/community.general/issues/2919).
|
- cobbler_sync, cobbler_system - fix SSL/TLS certificate check when ``validate_certs`` set to ``false`` (https://github.com/ansible-collections/community.general/pull/1880).
|
||||||
- archive - fixing archive root determination when longest common root is ``/`` (https://github.com/ansible-collections/community.general/pull/3036).
|
- consul_io inventory script - kv_groups - fix byte chain decoding for Python 3 (https://github.com/ansible-collections/community.general/pull/620).
|
||||||
- composer - use ``no-interaction`` option when discovering available options to avoid an issue where composer hangs (https://github.com/ansible-collections/community.general/pull/2348).
|
- cronvar - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- consul_acl - update the hcl allowlist to include all supported options (https://github.com/ansible-collections/community.general/pull/2495).
|
- dconf - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- consul_kv lookup plugin - allow to set ``recurse``, ``index``, ``datacenter`` and ``token`` as keyword arguments (https://github.com/ansible-collections/community.general/issues/2124).
|
- deploy_helper - allow ``state=clean`` to be used without defining a ``release`` (https://github.com/ansible-collections/community.general/issues/1852).
|
||||||
- copr - fix chroot naming issues, ``centos-stream`` changed naming to ``centos-stream-<number>`` (for exmaple ``centos-stream-8``) (https://github.com/ansible-collections/community.general/issues/2084, https://github.com/ansible-collections/community.general/pull/3237).
|
- dimensiondata_network - bug when formatting message, instead of % a simple comma was used (https://github.com/ansible-collections/community.general/pull/2139).
|
||||||
- cpanm - also use ``LC_ALL`` to enforce locale choice (https://github.com/ansible-collections/community.general/pull/2731).
|
- diy callback plugin - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- deploy_helper - improved parameter checking by using standard Ansible construct (https://github.com/ansible-collections/community.general/pull/3104).
|
- elasticsearch_plugin - ``state`` parameter choices must use ``list()`` in python3 (https://github.com/ansible-collections/community.general/pull/1830).
|
||||||
- django_manage - argument ``command`` is being splitted again as it should (https://github.com/ansible-collections/community.general/issues/3215).
|
- filesystem - do not fail when ``resizefs=yes`` and ``fstype=xfs`` if there is nothing to do, even if the filesystem is not mounted. This only covers systems supporting access to unmounted XFS filesystems. Others will still fail (https://github.com/ansible-collections/community.general/issues/1457, https://github.com/ansible-collections/community.general/pull/1478).
|
||||||
- django_manage - parameters ``apps`` and ``fixtures`` are now splitted instead of being used as a single argument (https://github.com/ansible-collections/community.general/issues/3333).
|
- filesystem - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- django_manage - refactor to call ``run_command()`` passing command as a list instead of string (https://github.com/ansible-collections/community.general/pull/3098).
|
- filesystem - remove ``swap`` from list of FS supported by ``resizefs=yes`` (https://github.com/ansible-collections/community.general/issues/790).
|
||||||
- ejabberd_user - replaced in-code check with ``required_if``, using ``get_bin_path()`` for the command, passing args to ``run_command()`` as list instead of string (https://github.com/ansible-collections/community.general/pull/3093).
|
- funcd connection plugin - can now load (https://github.com/ansible-collections/community.general/pull/2235).
|
||||||
- filesystem - repair ``reiserfs`` fstype support after adding it to integration tests (https://github.com/ansible-collections/community.general/pull/2472).
|
- git_config - fixed scope ``file`` behaviour and added integraton test for it (https://github.com/ansible-collections/community.general/issues/2117).
|
||||||
- gitlab_deploy_key - fix idempotency on projects with multiple deploy keys (https://github.com/ansible-collections/community.general/pull/3473).
|
- git_config - prevent ``run_command`` from expanding values (https://github.com/ansible-collections/community.general/issues/1776).
|
||||||
- gitlab_deploy_key - fix the SSH Deploy Key being deleted accidentally while running task in check mode (https://github.com/ansible-collections/community.general/issues/3621, https://github.com/ansible-collections/community.general/pull/3622).
|
- github_repo - PyGithub bug does not allow explicit port in ``base_url``. Specifying port is not required (https://github.com/PyGithub/PyGithub/issues/1913).
|
||||||
- gitlab_group - avoid passing wrong value for ``require_two_factor_authentication`` on creation when the option has not been specified (https://github.com/ansible-collections/community.general/pull/3453).
|
- gitlab_runner - parameter ``registration_token`` was required but is used only when ``state`` is ``present`` (https://github.com/ansible-collections/community.general/issues/1714).
|
||||||
- gitlab_group_members - ``get_group_id`` return the group ID by matching ``full_path``, ``path`` or ``name`` (https://github.com/ansible-collections/community.general/pull/3400).
|
- gitlab_user - make updates to the ``isadmin``, ``password`` and ``confirm`` options of an already existing GitLab user work (https://github.com/ansible-collections/community.general/pull/1724).
|
||||||
- gitlab_group_members - fixes issue when gitlab group has more then 20 members, pagination problem (https://github.com/ansible-collections/community.general/issues/3041).
|
- haproxy - fix a bug preventing haproxy from properly entering ``DRAIN`` mode (https://github.com/ansible-collections/community.general/issues/1913).
|
||||||
- gitlab_project - user projects are created using namespace ID now, instead of user ID (https://github.com/ansible-collections/community.general/pull/2881).
|
- hiera lookup plugin - converts the return type of plugin to unicode string (https://github.com/ansible-collections/community.general/pull/2329).
|
||||||
- gitlab_project_members - ``get_project_id`` return the project id by matching ``full_path`` or ``name`` (https://github.com/ansible-collections/community.general/pull/3602).
|
- hipchat - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- gitlab_project_members - fixes issue when gitlab group has more then 20 members, pagination problem (https://github.com/ansible-collections/community.general/issues/3041).
|
- idrac_redfish_command - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- idrac_redfish_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- idrac_redfish_config - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- influxdb_retention_policy - fix bug where ``INF`` duration values failed parsing (https://github.com/ansible-collections/community.general/pull/2385).
|
- idrac_redfish_info - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- influxdb_user - allow creation of admin users when InfluxDB authentication is enabled but no other user exists on the database. In this scenario, InfluxDB 1.x allows only ``CREATE USER`` queries and rejects any other query (https://github.com/ansible-collections/community.general/issues/2364).
|
- imc_rest - explicitly logging out instead of registering the call in ```atexit``` (https://github.com/ansible-collections/community.general/issues/1735).
|
||||||
- influxdb_user - fix bug where an influxdb user has no privileges for 2 or more databases (https://github.com/ansible-collections/community.general/pull/2499).
|
- influxdb_retention_policy - ensure idempotent module execution with different duration and shard duration parameter values (https://github.com/ansible-collections/community.general/issues/2281).
|
||||||
- influxdb_user - fix bug which removed current privileges instead of appending them to existing ones (https://github.com/ansible-collections/community.general/issues/2609, https://github.com/ansible-collections/community.general/pull/2614).
|
- infoblox inventory script - make sure that the script also works with Ansible 2.9, and returns a more helpful error when community.general is not installed as part of Ansible 2.10/3 (https://github.com/ansible-collections/community.general/pull/1871).
|
||||||
- ini_file - fix Unicode processing for Python 2 (https://github.com/ansible-collections/community.general/pull/2875).
|
- ini_file - allows an empty string as a value for an option (https://github.com/ansible-collections/community.general/pull/1972).
|
||||||
- ini_file - fix inconsistency between empty value and no value (https://github.com/ansible-collections/community.general/issues/3031).
|
- interfaces_file - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- interfaces_file - no longer reporting change when none happened (https://github.com/ansible-collections/community.general/pull/3328).
|
- ipa_user - allow ``sshpubkey`` to permit multiple word comments (https://github.com/ansible-collections/community.general/pull/2159).
|
||||||
- inventory and vault scripts - change file permissions to make vendored inventory and vault scripts exectuable (https://github.com/ansible-collections/community.general/pull/2337).
|
- iso_extract - use proper alias deprecation mechanism for ``thirsty`` alias of ``force`` (https://github.com/ansible-collections/community.general/pull/1830).
|
||||||
- ipa_* modules - fix environment fallback for ``ipa_host`` option (https://github.com/ansible-collections/community.general/issues/3560).
|
- java_cert - allow setting ``state: absent`` by providing just the ``cert_alias`` (https://github.com/ansible/ansible/issues/27982).
|
||||||
- ipa_sudorule - call ``sudorule_add_allow_command`` method instead of ``sudorule_add_allow_command_group`` (https://github.com/ansible-collections/community.general/issues/2442).
|
- java_cert - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- iptables_state - call ``async_status`` action plugin rather than its module (https://github.com/ansible-collections/community.general/issues/2700).
|
- java_cert - properly handle proxy arguments when the scheme is provided (https://github.com/ansible/ansible/issues/54481).
|
||||||
- iptables_state - fix a 'FutureWarning' in a regex and do some basic code clean up (https://github.com/ansible-collections/community.general/pull/2525).
|
- java_keystore - improve error handling and return ``cmd`` as documented. Force ``LANG``, ``LC_ALL`` and ``LC_MESSAGES`` environment variables to ``C`` to rely on ``keytool`` output parsing. Fix pylint's ``unused-variable`` and ``no-else-return`` hints (https://github.com/ansible-collections/community.general/pull/2183).
|
||||||
- iptables_state - fix a broken query of ``async_status`` result with current ansible-core development version (https://github.com/ansible-collections/community.general/issues/2627, https://github.com/ansible-collections/community.general/pull/2671).
|
- java_keystore - use tempfile lib to create temporary files with randomized names, and remove the temporary PKCS#12 keystore as well as other materials (https://github.com/ansible-collections/community.general/issues/1667).
|
||||||
- iptables_state - fix initialization of iptables from null state when adressing more than one table (https://github.com/ansible-collections/community.general/issues/2523).
|
- jenkins_plugin - fixes Python 2 compatibility issue (https://github.com/ansible-collections/community.general/pull/2340).
|
||||||
- java_cert - fix issue with incorrect alias used on PKCS#12 certificate import (https://github.com/ansible-collections/community.general/pull/2560).
|
- jira - fixed calling of ``isinstance`` (https://github.com/ansible-collections/community.general/issues/2234).
|
||||||
- java_cert - import private key as well as public certificate from PKCS#12 (https://github.com/ansible-collections/community.general/issues/2460).
|
- jira - fixed error when loading base64-encoded content as attachment (https://github.com/ansible-collections/community.general/pull/2349).
|
||||||
- java_keystore - add parameter ``keystore_type`` to control output file format and override ``keytool``'s default, which depends on Java version (https://github.com/ansible-collections/community.general/issues/2515).
|
- jira - fixed fields' update in ticket transitions (https://github.com/ansible-collections/community.general/issues/818).
|
||||||
- jboss - fix the deployment file permission issue when Jboss server is running under non-root user. The deployment file is copied with file content only. The file permission is set to ``440`` and belongs to root user. When the JBoss ``WildFly`` server is running under non-root user, it is unable to read the deployment file (https://github.com/ansible-collections/community.general/pull/3426).
|
- kibana_plugin - ``state`` parameter choices must use ``list()`` in python3 (https://github.com/ansible-collections/community.general/pull/1830).
|
||||||
- jenkins_build - examine presence of ``build_number`` before deleting a jenkins build (https://github.com/ansible-collections/community.general/pull/2850).
|
- kibana_plugin - added missing parameters to ``remove_plugin`` when using ``state=present force=true``, and fix potential quoting errors when invoking ``kibana`` (https://github.com/ansible-collections/community.general/pull/2143).
|
||||||
- jenkins_plugin - use POST method for sending request to jenkins API when ``state`` option is one of ``enabled``, ``disabled``, ``pinned``, ``unpinned``, or ``absent`` (https://github.com/ansible-collections/community.general/issues/2510).
|
- logstash_plugin - wrapped ``dict.keys()`` with ``list`` for use in ``choices`` setting (https://github.com/ansible-collections/community.general/pull/1830).
|
||||||
- json_query filter plugin - avoid 'unknown type' errors for more Ansible internal types (https://github.com/ansible-collections/community.general/pull/2607).
|
- lvg - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- keycloak_authentication - fix bug when two identical executions are in the same authentication flow (https://github.com/ansible-collections/community.general/pull/2904).
|
- lvol - fixed sizing calculation rounding to match the underlying tools (https://github.com/ansible-collections/community.general/issues/1988).
|
||||||
- keycloak_authentication - fix bug, the requirement was always on ``DISABLED`` when creating a new authentication flow (https://github.com/ansible-collections/community.general/pull/3330).
|
- lvol - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- keycloak_client - update the check mode to not show differences resulting from sorting and default values relating to the properties, ``redirectUris``, ``attributes``, and ``protocol_mappers`` (https://github.com/ansible-collections/community.general/pull/3610).
|
- lxc - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- keycloak_identity_provider - fix change detection when updating identity provider mappers (https://github.com/ansible-collections/community.general/pull/3538, https://github.com/ansible-collections/community.general/issues/3537).
|
- lxc_container - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- keycloak_realm - ``ssl_required`` changed from a boolean type to accept the strings ``none``, ``external`` or ``all``. This is not a breaking change since the module always failed when a boolean was supplied (https://github.com/ansible-collections/community.general/pull/2693).
|
- lxc_container - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- keycloak_realm - element type for ``events_listeners`` parameter should be ``string`` instead of ``dict`` (https://github.com/ansible-collections/community.general/pull/3231).
|
- lxd_container - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- keycloak_realm - remove warning that ``reset_password_allowed`` needs to be marked as ``no_log`` (https://github.com/ansible-collections/community.general/pull/2694).
|
- manageiq_provider - wrapped ``dict.keys()`` with ``list`` for use in ``choices`` setting (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- keycloak_role - quote role name when used in URL path to avoid errors when role names contain special characters (https://github.com/ansible-collections/community.general/issues/3535, https://github.com/ansible-collections/community.general/pull/3536).
|
- memcached cache plugin - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- launchd - fixed sanity check in the module's code (https://github.com/ansible-collections/community.general/pull/2960).
|
- meta/runtime.yml - improve deprecation messages (https://github.com/ansible-collections/community.general/pull/1918).
|
||||||
- launchd - use private attribute to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- module_helper module utils - actually ignoring formatting of parameters with value ``None`` (https://github.com/ansible-collections/community.general/pull/2024).
|
||||||
- linode inventory plugin - fix default value of new option ``ip_style`` (https://github.com/ansible-collections/community.general/issues/3337).
|
- module_helper module utils - fixed decorator ``cause_changes`` (https://github.com/ansible-collections/community.general/pull/2203).
|
||||||
- linode_v4 - changed the error message to point to the correct bugtracker URL (https://github.com/ansible-collections/community.general/pull/2430).
|
- module_helper module utils - handling ``ModuleHelperException`` now properly calls ``fail_json()`` (https://github.com/ansible-collections/community.general/pull/2024).
|
||||||
- logdns callback plugin - improve split call to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- module_helper module utils - use the command name as-is in ``CmdMixin`` if it fails ``get_bin_path()`` - allowing full path names to be passed (https://github.com/ansible-collections/community.general/pull/2024).
|
||||||
- logstash callback plugin - replace ``_option`` with ``context.CLIARGS`` to fix the plugin on ansible-base and ansible-core (https://github.com/ansible-collections/community.general/issues/2692).
|
- net_tools.nios.api module_utils - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- lvol - fixed rounding errors (https://github.com/ansible-collections/community.general/issues/2370).
|
- nios* modules - fix modules to work with ansible-core 2.11 (https://github.com/ansible-collections/community.general/pull/2057).
|
||||||
- lvol - fixed size unit capitalization to match units used between different tools for comparison (https://github.com/ansible-collections/community.general/issues/2360).
|
- nios_host_record - allow DNS Bypass for views other than default (https://github.com/ansible-collections/community.general/issues/1786).
|
||||||
- lvol - honor ``check_mode`` on thinpool (https://github.com/ansible-collections/community.general/issues/2934).
|
- nmap inventory plugin - fix cache and constructed group support (https://github.com/ansible-collections/community.general/issues/2242).
|
||||||
- macports - add ``stdout`` and ``stderr`` to return values (https://github.com/ansible-collections/community.general/issues/3499).
|
- nmcli - add ``method4`` and ``method6`` options (https://github.com/ansible-collections/community.general/pull/1894).
|
||||||
- maven_artifact - improve split call to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- nmcli - ensure the ``slave-type`` option is passed to ``nmcli`` for type ``bond-slave`` (https://github.com/ansible-collections/community.general/pull/1882).
|
||||||
- memcached cache plugin - change function argument names to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- nomad_job_info - fix module failure when nomad client returns no jobs (https://github.com/ansible-collections/community.general/pull/1721).
|
||||||
- memset_memstore_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- nsot inventory script - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- memset_server_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- oci_vcn - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- modprobe - added additional checks to ensure module load/unload is effective (https://github.com/ansible-collections/community.general/issues/1608).
|
- oneandone_monitoring_policy - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- module_helper module utils - ``CmdMixin`` must also use ``LC_ALL`` to enforce locale choice (https://github.com/ansible-collections/community.general/pull/2731).
|
- packet_volume_attachment - removed extraneous ``print`` call - old debug? (https://github.com/ansible-collections/community.general/pull/1970).
|
||||||
- module_helper module utils - avoid failing when non-zero ``rc`` is present on regular exit (https://github.com/ansible-collections/community.general/pull/2912).
|
- parted - change the regex that decodes the partition size to better support different formats that parted uses. Change the regex that validates parted's version string (https://github.com/ansible-collections/community.general/pull/1695).
|
||||||
- module_helper module utils - fixed change-tracking for dictionaries and lists (https://github.com/ansible-collections/community.general/pull/2951).
|
- parted - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- netapp module utils - remove always-true conditional to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- pkgutil - fixed calls to ``list.extend()`` (https://github.com/ansible-collections/community.general/pull/2161).
|
||||||
- netcup_dns - use ``str(ex)`` instead of unreliable ``ex.message`` in exception handling to fix ``AttributeError`` in error cases (https://github.com/ansible-collections/community.general/pull/2590).
|
- proxmox - removed requirement that root password is provided when containter state is ``present`` (https://github.com/ansible-collections/community.general/pull/1999).
|
||||||
- nmap inventory plugin - fix local variable error when cache is disabled (https://github.com/ansible-collections/community.general/issues/2512).
|
- proxmox inventory - added handling of commas in KVM agent configuration string (https://github.com/ansible-collections/community.general/pull/2245).
|
||||||
- nmcli - added ip4/ip6 configuration arguments for ``sit`` and ``ipip`` tunnels (https://github.com/ansible-collections/community.general/issues/3238, https://github.com/ansible-collections/community.general/pull/3239).
|
- proxmox inventory - added handling of extra trailing slashes in the URL (https://github.com/ansible-collections/community.general/pull/1914).
|
||||||
- nmcli - compare MAC addresses case insensitively to fix idempotency issue (https://github.com/ansible-collections/community.general/issues/2409).
|
- proxmox inventory - exclude qemu templates from inclusion to the inventory via pools (https://github.com/ansible-collections/community.general/issues/1986, https://github.com/ansible-collections/community.general/pull/1991).
|
||||||
- nmcli - fixed ``dns6`` option handling so that it is treated as a list internally (https://github.com/ansible-collections/community.general/pull/3563).
|
- proxmox inventory plugin - allowed proxomox tag string to contain commas when returned as fact (https://github.com/ansible-collections/community.general/pull/1949).
|
||||||
- nmcli - fixed ``ipv4.route-metric`` being in properties of type list (https://github.com/ansible-collections/community.general/pull/3563).
|
- proxmox inventory plugin - support network interfaces without IP addresses, multiple network interfaces and unsupported/commanddisabled guest error (https://github.com/ansible-collections/community.general/pull/2263).
|
||||||
- nmcli - fixes team-slave configuration by adding connection.slave-type (https://github.com/ansible-collections/community.general/issues/766).
|
- proxmox lxc - only add the features flag when module parameter ``features`` is set. Before an empty string was send to proxmox in case the parameter was not used, which required to use ``root@pam`` for module execution (https://github.com/ansible-collections/community.general/pull/1763).
|
||||||
- nmcli - if type is ``bridge-slave`` add ``slave-type bridge`` to ``nmcli`` command (https://github.com/ansible-collections/community.general/issues/2408).
|
- proxmox* modules - refactored some parameter validation code into use of ``env_fallback``, ``required_if``, ``required_together``, ``required_one_of`` (https://github.com/ansible-collections/community.general/pull/1765).
|
||||||
- npm - correctly handle cases where a dependency does not have a ``version`` property because it is either missing or invalid (https://github.com/ansible-collections/community.general/issues/2917).
|
- proxmox_kvm - do not add ``args`` if ``proxmox_default_behavior`` is set to no_defaults (https://github.com/ansible-collections/community.general/issues/1641).
|
||||||
- npm - when the ``version`` option is used the comparison of installed vs missing will use name@version instead of just name, allowing version specific updates (https://github.com/ansible-collections/community.general/issues/2021).
|
- proxmox_kvm - fix parameter ``vmid`` passed twice to ``exit_json`` while creating a virtual machine without cloning (https://github.com/ansible-collections/community.general/issues/1875, https://github.com/ansible-collections/community.general/pull/1895).
|
||||||
- one_image - fix error message when renaming an image (https://github.com/ansible-collections/community.general/pull/3626).
|
- proxmox_kvm - fix undefined local variable ``status`` when the parameter ``state`` is either ``stopped``, ``started``, ``restarted`` or ``absent`` (https://github.com/ansible-collections/community.general/pull/1847).
|
||||||
- one_template - change function argument name to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- proxmox_kvm - stop implicitly adding ``force`` equal to ``false``. Proxmox API requires not implemented parameters otherwise, and assumes ``force`` to be ``false`` by default anyways (https://github.com/ansible-collections/community.general/pull/1783).
|
||||||
- one_vm - Allow missing NIC keys (https://github.com/ansible-collections/community.general/pull/2435).
|
- redfish_command - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- oneview_datacenter_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- redfish_config - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- oneview_enclosure_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- redfish_config module, redfish_utils module utils - fix IndexError in ``SetManagerNic`` command (https://github.com/ansible-collections/community.general/issues/1692).
|
||||||
- oneview_ethernet_network_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- redfish_info module, redfish_utils module utils - add ``Name`` and ``Id`` properties to output of Redfish inventory commands (https://github.com/ansible-collections/community.general/issues/1650).
|
||||||
- oneview_fc_network_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- redhat_subscription - ``mutually_exclusive`` was referring to parameter alias instead of name (https://github.com/ansible-collections/community.general/pull/1795).
|
||||||
- oneview_fcoe_network_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- redhat_subscription - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- oneview_logical_interconnect_group_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- redis cache plugin - wrapped usages of ``keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- oneview_network_set_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- riak - parameters ``wait_for_handoffs`` and ``wait_for_ring`` are ``int`` but the default value was ``false`` (https://github.com/ansible-collections/community.general/pull/1830).
|
||||||
- oneview_san_manager_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
- rundeck_acl_policy - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- online inventory plugin - improve split call to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- runit - removed unused code, and passing command as ``list`` instead of ``str`` to ``run_command()`` (https://github.com/ansible-collections/community.general/pull/1830).
|
||||||
- online module utils - improve split call to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- scaleway inventory plugin - fix pagination on scaleway inventory plugin (https://github.com/ansible-collections/community.general/pull/2036).
|
||||||
- open_iscsi - calling ``run_command`` with arguments as ``list`` instead of ``str`` (https://github.com/ansible-collections/community.general/pull/3286).
|
- selective callback plugin - adjust import so that the plugin also works with ansible-core 2.11 (https://github.com/ansible-collections/community.general/pull/1807).
|
||||||
- openbsd_pkg - fix crash from ``KeyError`` exception when package installs, but ``pkg_add`` returns with a non-zero exit code (https://github.com/ansible-collections/community.general/pull/3336).
|
- selective callback plugin - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- openbsd_pkg - fix regexp matching crash. This bug could trigger on package names with special characters, for example ``g++`` (https://github.com/ansible-collections/community.general/pull/3161).
|
- sensu-silence module - fix json parsing of sensu API responses on Python 3.5 (https://github.com/ansible-collections/community.general/pull/1703).
|
||||||
- opentelemetry callback plugin - validated the task result exception without crashing. Also simplifying code a bit (https://github.com/ansible-collections/community.general/pull/3450, https://github.com/ansible/ansible/issues/75726).
|
- sensu_check - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- openwrt_init - calling ``run_command`` with arguments as ``list`` instead of ``str`` (https://github.com/ansible-collections/community.general/pull/3284).
|
- spotinst_aws_elastigroup - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- ovir4 inventory script - improve configparser creation to avoid crashes for options without values (https://github.com/ansible-collections/community.general/issues/674).
|
- stacki_host - replaced ``default`` to environment variables with ``fallback`` to them (https://github.com/ansible-collections/community.general/pull/2072).
|
||||||
- packet_device - use generator to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- statusio_maintenance - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- packet_sshkey - use generator to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
- terraform - fix issue that cause the destroy to fail because from Terraform 0.15 on, the ``terraform destroy -force`` option is replaced with ``terraform destroy -auto-approve`` (https://github.com/ansible-collections/community.general/issues/2247).
|
||||||
- pacman - fix changed status when ignorepkg has been defined (https://github.com/ansible-collections/community.general/issues/1758).
|
- terraform - fix issue that cause the execution fail because from Terraform 0.15 on, the ``-var`` and ``-var-file`` options are no longer available on ``terraform validate`` (https://github.com/ansible-collections/community.general/pull/2246).
|
||||||
- pamd - code for ``state=updated`` when dealing with the pam module arguments, made no distinction between ``None`` and an empty list (https://github.com/ansible-collections/community.general/issues/3260).
|
- terraform - remove uses of ``use_unsafe_shell=True`` (https://github.com/ansible-collections/community.general/pull/2246).
|
||||||
- pamd - fixed problem with files containing only one or two lines (https://github.com/ansible-collections/community.general/issues/2925).
|
- timezone - internal refactoring: replaced uses of ``_`` with ``dummy`` (https://github.com/ansible-collections/community.general/pull/1819).
|
||||||
- pids - avoid crashes for older ``psutil`` versions, like on RHEL6 and RHEL7 (https://github.com/ansible-collections/community.general/pull/2808).
|
- udm_dns_record - fixed default value of parameter ``data`` to match its type (https://github.com/ansible-collections/community.general/pull/2268).
|
||||||
- pipx - ``state=inject`` was failing to parse the list of injected packages (https://github.com/ansible-collections/community.general/pull/3611).
|
- utm_utils module_utils - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- pipx - set environment variable ``USE_EMOJI=0`` to prevent errors in platforms that do not support ``UTF-8`` (https://github.com/ansible-collections/community.general/pull/3611).
|
- vdo - wrapped usages of ``dict.keys()`` in ``list()`` for Python 3 compatibility (https://github.com/ansible-collections/community.general/pull/1861).
|
||||||
- pipx - the output value ``cmd_args`` was bringing the intermediate command used to gather the state, instead of the command that actually performed the state change (https://github.com/ansible-collections/community.general/pull/3655).
|
- vmadm - correct type of list elements in ``resolvers`` parameter (https://github.com/ansible-collections/community.general/issues/2135).
|
||||||
- pkgin - Fix exception encountered when all packages are already installed (https://github.com/ansible-collections/community.general/pull/3583).
|
- xfconf - module was not honoring check mode when ``state`` was ``absent`` (https://github.com/ansible-collections/community.general/pull/2185).
|
||||||
- pkgng - ``name=* state=latest`` check for upgrades did not count "Number of packages to be reinstalled" as a `changed` action, giving incorrect results in both regular and check mode (https://github.com/ansible-collections/community.general/pull/3526).
|
- xfs_quota - the feedback for initializing project quota using xfs_quota binary from ``xfsprogs`` has changed since the version it was written for (https://github.com/ansible-collections/community.general/pull/1596).
|
||||||
- pkgng - an `earlier PR <https://github.com/ansible-collections/community.general/pull/3393>`_ broke check mode so that the module always reports `not changed`. This is now fixed so that the module reports number of upgrade or install actions that would be performed (https://github.com/ansible-collections/community.general/pull/3526).
|
- zfs - some ZFS properties could be passed when the dataset/volume did not exist, but would fail if the dataset already existed, even if the property matched what was specified in the ansible task (https://github.com/ansible-collections/community.general/issues/868, https://github.com/ansible-collections/community.general/pull/1833).
|
||||||
- pkgng - the ``annotation`` functionality was broken and is now fixed, and now also works with check mode (https://github.com/ansible-collections/community.general/pull/3526).
|
- zfs_delegate_admin - the elements of ``users``, ``groups`` and ``permissions`` are now enforced to be strings (https://github.com/ansible-collections/community.general/pull/1766).
|
||||||
- proxmox inventory plugin - fixed parsing failures when some cluster nodes are offline (https://github.com/ansible-collections/community.general/issues/2931).
|
- zypper, zypper_repository - respect ``PATH`` environment variable when resolving zypper executable path (https://github.com/ansible-collections/community.general/pull/2094).
|
||||||
- proxmox inventory plugin - fixed plugin failure when a ``qemu`` guest has no ``template`` key (https://github.com/ansible-collections/community.general/pull/3052).
|
|
||||||
- proxmox_group_info - fix module crash if a ``group`` parameter is used (https://github.com/ansible-collections/community.general/pull/3649).
|
|
||||||
- proxmox_kvm - clone operation should return the VMID of the target VM and not that of the source VM. This was failing when the target VM with the chosen name already existed (https://github.com/ansible-collections/community.general/pull/3266).
|
|
||||||
- proxmox_kvm - fix parsing of Proxmox VM information with device info not containing a comma, like disks backed by ZFS zvols (https://github.com/ansible-collections/community.general/issues/2840).
|
|
||||||
- proxmox_kvm - fix result of clone, now returns ``newid`` instead of ``vmid`` (https://github.com/ansible-collections/community.general/pull/3034).
|
|
||||||
- proxmox_kvm - fixed ``vmid`` return value when VM with ``name`` already exists (https://github.com/ansible-collections/community.general/issues/2648).
|
|
||||||
- puppet - replace ``console` with ``stdout`` in ``logdest`` option when ``all`` has been chosen (https://github.com/ansible-collections/community.general/issues/1190).
|
|
||||||
- rax_facts - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- redfish_command - fix extraneous error caused by missing ``bootdevice`` argument when using the ``DisableBootOverride`` sub-command (https://github.com/ansible-collections/community.general/issues/3005).
|
|
||||||
- redfish_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- redfish_utils module utils - do not attempt to change the boot source override mode if not specified by the user (https://github.com/ansible-collections/community.general/issues/3509/).
|
|
||||||
- redfish_utils module utils - if a manager network property is not specified in the service, attempt to change the requested settings (https://github.com/ansible-collections/community.general/issues/3404/).
|
|
||||||
- redfish_utils module utils - if given, add account ID of user that should be created to HTTP request (https://github.com/ansible-collections/community.general/pull/3343/).
|
|
||||||
- redis cache - improved connection string parsing (https://github.com/ansible-collections/community.general/issues/497).
|
|
||||||
- rhsm_release - fix the issue that module considers 8, 7Client and 7Workstation as invalid releases (https://github.com/ansible-collections/community.general/pull/2571).
|
|
||||||
- saltstack connection plugin - fix function signature (https://github.com/ansible-collections/community.general/pull/3194).
|
|
||||||
- scaleway module utils - improve split call to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
|
||||||
- scaleway plugin inventory - fix ``JSON object must be str, not 'bytes'`` with Python 3.5 (https://github.com/ansible-collections/community.general/issues/2769).
|
|
||||||
- smartos_image_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- snap - also use ``LC_ALL`` to enforce locale choice (https://github.com/ansible-collections/community.general/pull/2731).
|
|
||||||
- snap - fix formatting of ``--channel`` argument when the ``channel`` option is used (https://github.com/ansible-collections/community.general/pull/3028).
|
|
||||||
- snap - fix various bugs which prevented the module from working at all, and which resulted in ``state=absent`` fail on absent snaps (https://github.com/ansible-collections/community.general/issues/2835, https://github.com/ansible-collections/community.general/issues/2906, https://github.com/ansible-collections/community.general/pull/2912).
|
|
||||||
- snap - fixed the order of the ``--classic`` parameter in the command line invocation (https://github.com/ansible-collections/community.general/issues/2916).
|
|
||||||
- snap_alias - the output value ``cmd_args`` was bringing the intermediate command used to gather the state, instead of the command that actually performed the state change (https://github.com/ansible-collections/community.general/pull/3655).
|
|
||||||
- snmp_facts - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- ssh_config - reduce stormssh searches based on host (https://github.com/ansible-collections/community.general/pull/2568/).
|
|
||||||
- stacki_host - when adding a new server, ``rack`` and ``rank`` must be passed, and network parameters are optional (https://github.com/ansible-collections/community.general/pull/2681).
|
|
||||||
- stackpath_compute inventory script - fix broken validation checks for client ID and client secret (https://github.com/ansible-collections/community.general/pull/2448).
|
|
||||||
- supervisorctl - state ``signalled`` was not working (https://github.com/ansible-collections/community.general/pull/3068).
|
|
||||||
- svr4pkg - convert string to a bytes-like object to avoid ``TypeError`` with Python 3 (https://github.com/ansible-collections/community.general/issues/2373).
|
|
||||||
- taiga - some constructs in the module fixed to work also in Python 3 (https://github.com/ansible-collections/community.general/pull/3067).
|
|
||||||
- terraform - ensure the workspace is set back to its previous value when the apply fails (https://github.com/ansible-collections/community.general/pull/2634).
|
|
||||||
- tss lookup plugin - fixed backwards compatibility issue with ``python-tss-sdk`` version <=0.0.5 (https://github.com/ansible-collections/community.general/issues/3192, https://github.com/ansible-collections/community.general/pull/3199).
|
|
||||||
- tss lookup plugin - fixed incompatibility with ``python-tss-sdk`` version 1.0.0 (https://github.com/ansible-collections/community.general/issues/3057, https://github.com/ansible-collections/community.general/pull/3139).
|
|
||||||
- udm_dns_record - fixed managing of PTR records, which can never have worked before (https://github.com/ansible-collections/community.general/pull/3256).
|
|
||||||
- ufw - use generator to fix sanity errors (https://github.com/ansible-collections/community.general/pull/3194).
|
|
||||||
- utm_aaa_group_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- utm_ca_host_key_cert_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- utm_network_interface_address_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- utm_proxy_frontend_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- utm_proxy_location_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- vdo - boolean arguments now compared with proper ``true`` and ``false`` values instead of string representations like ``"yes"`` or ``"no"`` (https://github.com/ansible-collections/community.general/pull/3191).
|
|
||||||
- xenserver_facts - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- xfconf - also use ``LC_ALL`` to enforce locale choice (https://github.com/ansible-collections/community.general/issues/2715).
|
|
||||||
- xfconf_info - added support to check mode (https://github.com/ansible-collections/community.general/pull/3084).
|
|
||||||
- yaml callback plugin - avoid modifying PyYAML so that other plugins using it on the controller, like the ``to_yaml`` filter, do not produce different output (https://github.com/ansible-collections/community.general/issues/3471, https://github.com/ansible-collections/community.general/pull/3478).
|
|
||||||
- yum_versionlock - fix idempotency when using wildcard (asterisk) in ``name`` option (https://github.com/ansible-collections/community.general/issues/2761).
|
|
||||||
- zfs - certain ZFS properties, especially sizes, would lead to a task being falsely marked as "changed" even when no actual change was made (https://github.com/ansible-collections/community.general/issues/975, https://github.com/ansible-collections/community.general/pull/2454).
|
|
||||||
- zfs - treated received properties as local (https://github.com/ansible-collections/community.general/pull/502).
|
|
||||||
- zypper_repository - fix idempotency on adding repository with ``$releasever`` and ``$basearch`` variables (https://github.com/ansible-collections/community.general/issues/1985).
|
|
||||||
- zypper_repository - when an URL to a .repo file was provided in option ``repo=`` and ``state=present`` only the first run was successful, future runs failed due to missing checks prior starting zypper. Usage of ``state=absent`` in combination with a .repo file was not working either (https://github.com/ansible-collections/community.general/issues/1791, https://github.com/ansible-collections/community.general/issues/3466).
|
|
||||||
|
|
||||||
New Plugins
|
New Plugins
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
Become
|
||||||
|
~~~~~~
|
||||||
|
|
||||||
|
- sudosu - Run tasks using sudo su -
|
||||||
|
|
||||||
Callback
|
Callback
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
- elastic - Create distributed traces for each Ansible task in Elastic APM
|
- loganalytics - Posts task results to Azure Log Analytics
|
||||||
- opentelemetry - Create distributed traces with OpenTelemetry
|
|
||||||
|
|
||||||
Filter
|
Filter
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
- groupby_as_dict - Transform a sequence of dictionaries to a dictionary where the dictionaries are indexed by an attribute
|
- dict - The ``dict`` function as a filter: converts a list of tuples to a dictionary
|
||||||
- unicode_normalize - Normalizes unicode strings to facilitate comparison of characters with normalized forms
|
- from_csv - Converts CSV text input into list of dicts
|
||||||
|
- hashids_decode - Decodes a sequence of numbers from a YouTube-like hash
|
||||||
|
- hashids_encode - Encodes YouTube-like hashes from a sequence of integers
|
||||||
|
- path_join - Redirects to ansible.builtin.path_join for ansible-base 2.10 or newer, and provides a compatible implementation for Ansible 2.9
|
||||||
|
- version_sort - Sort a list according to version order instead of pure alphabetical one
|
||||||
|
|
||||||
Inventory
|
Inventory
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
- icinga2 - Icinga2 inventory source
|
- lxd - Returns Ansible inventory from lxd host
|
||||||
- opennebula - OpenNebula inventory source
|
|
||||||
|
|
||||||
Lookup
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
- collection_version - Retrieves the version of an installed collection
|
|
||||||
- dependent - Composes a list with nested elements of other lists or dicts which can depend on previous loop variables
|
|
||||||
- random_pet - Generates random pet names
|
|
||||||
- random_string - Generates random string
|
|
||||||
- random_words - Return a number of random words
|
|
||||||
|
|
||||||
Test
|
|
||||||
~~~~
|
|
||||||
|
|
||||||
- a_module - Check whether the given string refers to an available module or action plugin
|
|
||||||
|
|
||||||
New Modules
|
New Modules
|
||||||
-----------
|
-----------
|
||||||
@@ -471,84 +464,73 @@ Cloud
|
|||||||
misc
|
misc
|
||||||
^^^^
|
^^^^
|
||||||
|
|
||||||
- proxmox_nic - Management of a NIC of a Qemu(KVM) VM in a Proxmox VE cluster.
|
- proxmox_storage_info - Retrieve information about one or more Proxmox VE storages
|
||||||
- proxmox_tasks_info - Retrieve information about one or more Proxmox VE tasks
|
|
||||||
|
|
||||||
Database
|
opennebula
|
||||||
~~~~~~~~
|
^^^^^^^^^^
|
||||||
|
|
||||||
misc
|
- one_template - Manages OpenNebula templates
|
||||||
^^^^
|
|
||||||
|
|
||||||
- redis_data - Set key value pairs in Redis
|
|
||||||
- redis_data_incr - Increment keys in Redis
|
|
||||||
- redis_data_info - Get value of key in Redis database
|
|
||||||
|
|
||||||
mssql
|
|
||||||
^^^^^
|
|
||||||
|
|
||||||
- mssql_script - Execute SQL scripts on a MSSQL database
|
|
||||||
|
|
||||||
saphana
|
|
||||||
^^^^^^^
|
|
||||||
|
|
||||||
- hana_query - Execute SQL on HANA
|
|
||||||
|
|
||||||
Files
|
Files
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
- sapcar_extract - Manages SAP SAPCAR archives
|
- filesize - Create a file with a given size, or resize it if it exists
|
||||||
|
|
||||||
Identity
|
Identity
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
|
ipa
|
||||||
|
^^^
|
||||||
|
|
||||||
|
- ipa_otpconfig - Manage FreeIPA OTP Configuration Settings
|
||||||
|
- ipa_otptoken - Manage FreeIPA OTPs
|
||||||
|
|
||||||
keycloak
|
keycloak
|
||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
|
|
||||||
- keycloak_authentication - Configure authentication in Keycloak
|
- keycloak_realm - Allows administration of Keycloak realm via Keycloak API
|
||||||
- keycloak_client_rolemapping - Allows administration of Keycloak client_rolemapping with the Keycloak API
|
|
||||||
- keycloak_clientscope - Allows administration of Keycloak client_scopes via Keycloak API
|
|
||||||
- keycloak_identity_provider - Allows administration of Keycloak identity providers via Keycloak API
|
|
||||||
- keycloak_role - Allows administration of Keycloak roles via Keycloak API
|
|
||||||
- keycloak_user_federation - Allows administration of Keycloak user federations via Keycloak API
|
|
||||||
|
|
||||||
Notification
|
Monitoring
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
- discord - Send Discord messages
|
- spectrum_model_attrs - Enforce a model's attributes in CA Spectrum.
|
||||||
|
- statsd - Send metrics to StatsD
|
||||||
|
|
||||||
Packaging
|
Net Tools
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
language
|
- gandi_livedns - Manage Gandi LiveDNS records
|
||||||
^^^^^^^^
|
|
||||||
|
|
||||||
- ansible_galaxy_install - Install Ansible roles or collections using ansible-galaxy
|
pritunl
|
||||||
- pipx - Manages applications installed with pipx
|
^^^^^^^
|
||||||
|
|
||||||
os
|
- pritunl_org - Manages Pritunl Organizations using the Pritunl API
|
||||||
^^
|
- pritunl_org_info - List Pritunl Organizations using the Pritunl API
|
||||||
|
- pritunl_user - Manage Pritunl Users using the Pritunl API
|
||||||
|
- pritunl_user_info - List Pritunl Users using the Pritunl API
|
||||||
|
|
||||||
- dnf_versionlock - Locks package versions in C(dnf) based systems
|
Remote Management
|
||||||
- pacman_key - Manage pacman's list of trusted keys
|
~~~~~~~~~~~~~~~~~
|
||||||
- snap_alias - Manages snap aliases
|
|
||||||
|
lenovoxcc
|
||||||
|
^^^^^^^^^
|
||||||
|
|
||||||
|
- xcc_redfish_command - Manages Lenovo Out-Of-Band controllers using Redfish APIs
|
||||||
|
|
||||||
Source Control
|
Source Control
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
github
|
||||||
|
^^^^^^
|
||||||
|
|
||||||
|
- github_repo - Manage your repositories on Github
|
||||||
|
|
||||||
gitlab
|
gitlab
|
||||||
^^^^^^
|
^^^^^^
|
||||||
|
|
||||||
- gitlab_protected_branch - (un)Marking existing branches for protection
|
- gitlab_project_members - Manage project members on GitLab Server
|
||||||
|
|
||||||
System
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
- sap_task_list_execute - Perform SAP Task list execution
|
|
||||||
- xfconf_info - Retrieve XFCE4 configurations
|
|
||||||
|
|
||||||
Web Infrastructure
|
Web Infrastructure
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
- rundeck_job_executions_info - Query executions for a Rundeck job
|
- jenkins_build - Manage jenkins builds
|
||||||
- rundeck_job_run - Run a Rundeck job
|
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
# Contributing
|
|
||||||
|
|
||||||
We follow [Ansible Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html) in all our contributions and interactions within this repository.
|
|
||||||
|
|
||||||
If you are a committer, also refer to the [collection's committer guidelines](https://github.com/ansible-collections/community.general/blob/main/commit-rights.md).
|
|
||||||
|
|
||||||
## Issue tracker
|
|
||||||
|
|
||||||
Whether you are looking for an opportunity to contribute or you found a bug and already know how to solve it, please go to the [issue tracker](https://github.com/ansible-collections/community.general/issues).
|
|
||||||
There you can find feature ideas to implement, reports about bugs to solve, or submit an issue to discuss your idea before implementing it which can help choose a right direction at the beginning of your work and potentially save a lot of time and effort.
|
|
||||||
Also somebody may already have started discussing or working on implementing the same or a similar idea,
|
|
||||||
so you can cooperate to create a better solution together.
|
|
||||||
|
|
||||||
* If you are interested in starting with an easy issue, look for [issues with an `easyfix` label](https://github.com/ansible-collections/community.general/labels/easyfix).
|
|
||||||
* Often issues that are waiting for contributors to pick up have [the `waiting_on_contributor` label](https://github.com/ansible-collections/community.general/labels/waiting_on_contributor).
|
|
||||||
|
|
||||||
## Open pull requests
|
|
||||||
|
|
||||||
Look through currently [open pull requests](https://github.com/ansible-collections/community.general/pulls).
|
|
||||||
You can help by reviewing them. Reviews help move pull requests to merge state. Some good pull requests cannot be merged only due to a lack of reviews. And it is always worth saying that good reviews are often more valuable than pull requests themselves.
|
|
||||||
Note that reviewing does not only mean code review, but also offering comments on new interfaces added to existing plugins/modules, interfaces of new plugins/modules, improving language (not everyone is a native english speaker), or testing bugfixes and new features!
|
|
||||||
|
|
||||||
Also, consider taking up a valuable, reviewed, but abandoned pull request which you could politely ask the original authors to complete yourself.
|
|
||||||
|
|
||||||
* Try committing your changes with an informative but short commit message.
|
|
||||||
* Do not squash your commits and force-push to your branch if not needed. Reviews of your pull request are much easier with individual commits to comprehend the pull request history. All commits of your pull request branch will be squashed into one commit by GitHub upon merge.
|
|
||||||
* Do not add merge commits to your PR. The bot will complain and you will have to rebase ([instructions for rebasing](https://docs.ansible.com/ansible/latest/dev_guide/developing_rebasing.html)) to remove them before your PR can be merged. To avoid that git automatically does merges during pulls, you can configure it to do rebases instead by running `git config pull.rebase true` inside the respository checkout.
|
|
||||||
* Make sure your PR includes a [changelog fragment](https://docs.ansible.com/ansible/devel/community/development_process.html#changelogs-how-to). (You must not include a fragment for new modules or new plugins, except for test and filter plugins. Also you shouldn't include one for docs-only changes. If you're not sure, simply don't include one, we'll tell you whether one is needed or not :) )
|
|
||||||
* Avoid reformatting unrelated parts of the codebase in your PR. These types of changes will likely be requested for reversion, create additional work for reviewers, and may cause approval to be delayed.
|
|
||||||
|
|
||||||
You can also read [our Quick-start development guide](https://github.com/ansible/community-docs/blob/main/create_pr_quick_start_guide.rst).
|
|
||||||
|
|
||||||
## Test pull requests
|
|
||||||
|
|
||||||
If you want to test a PR locally, refer to [our testing guide](https://github.com/ansible/community-docs/blob/main/test_pr_locally_guide.rst) for instructions on how do it quickly.
|
|
||||||
|
|
||||||
If you find any inconsistencies or places in this document which can be improved, feel free to raise an issue or pull request to fix it.
|
|
||||||
|
|
||||||
## Creating new modules or plugins
|
|
||||||
|
|
||||||
Creating new modules and plugins requires a bit more work than other Pull Requests.
|
|
||||||
|
|
||||||
1. Please make sure that your new module or plugin is of interest to a larger audience. Very specialized modules or plugins that
|
|
||||||
can only be used by very few people should better be added to more specialized collections.
|
|
||||||
|
|
||||||
2. Please do not add more than one plugin/module in one PR, especially if it is the first plugin/module you are contributing.
|
|
||||||
That makes it easier for reviewers, and increases the chance that your PR will get merged. If you plan to contribute a group
|
|
||||||
of plugins/modules (say, more than a module and a corresponding ``_info`` module), please mention that in the first PR. In
|
|
||||||
such cases, you also have to think whether it is better to publish the group of plugins/modules in a new collection.
|
|
||||||
|
|
||||||
3. When creating a new module or plugin, please make sure that you follow various guidelines:
|
|
||||||
|
|
||||||
- Follow [development conventions](https://docs.ansible.com/ansible/devel/dev_guide/developing_modules_best_practices.html);
|
|
||||||
- Follow [documentation standards](https://docs.ansible.com/ansible/devel/dev_guide/developing_modules_documenting.html) and
|
|
||||||
the [Ansible style guide](https://docs.ansible.com/ansible/devel/dev_guide/style_guide/index.html#style-guide);
|
|
||||||
- Make sure your modules and plugins are [GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0-standalone.html) licensed
|
|
||||||
(new module_utils can also be [BSD-2-clause](https://opensource.org/licenses/BSD-2-Clause) licensed);
|
|
||||||
- Make sure that new plugins and modules have tests (unit tests, integration tests, or both); it is preferable to have some tests
|
|
||||||
which run in CI.
|
|
||||||
|
|
||||||
4. For modules and action plugins, make sure to create your module/plugin in the correct subdirectory, and create a symbolic link
|
|
||||||
from `plugins/modules/` respectively `plugins/action/` to the actual module/plugin code. (Other plugin types should not use
|
|
||||||
subdirectories.)
|
|
||||||
|
|
||||||
- Action plugins need to be accompanied by a module, even if the module file only contains documentation
|
|
||||||
(`DOCUMENTATION`, `EXAMPLES` and `RETURN`). The module must have the same name and directory path in `plugins/modules/`
|
|
||||||
than the action plugin has in `plugins/action/`.
|
|
||||||
|
|
||||||
5. Make sure to add a BOTMETA entry for your new module/plugin in `.github/BOTMETA.yml`. Search for other plugins/modules in the
|
|
||||||
same directory to see how entries could look. You should list all authors either as `maintainers` or under `ignore`. People
|
|
||||||
listed as `maintainers` will be pinged for new issues and PRs that modify the module/plugin or its tests.
|
|
||||||
|
|
||||||
When you add a new plugin/module, we expect that you perform maintainer duty for at least some time after contributing it.
|
|
||||||
88
README.md
88
README.md
@@ -1,23 +1,15 @@
|
|||||||
# Community General Collection
|
# Community General Collection
|
||||||
|
|
||||||
[](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
|
[](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
|
||||||
[](https://codecov.io/gh/ansible-collections/community.general)
|
[](https://codecov.io/gh/ansible-collections/community.general)
|
||||||
|
|
||||||
This repository contains the `community.general` Ansible Collection. The collection is a part of the Ansible package and includes many modules and plugins supported by Ansible community which are not part of more specialized community collections.
|
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.
|
||||||
|
|
||||||
You can find [documentation for this collection on the Ansible docs site](https://docs.ansible.com/ansible/latest/collections/community/general/).
|
You can find [documentation for this collection on the Ansible docs site](https://docs.ansible.com/ansible/latest/collections/community/general/).
|
||||||
|
|
||||||
Please note that this collection does **not** support Windows targets. Only connection plugins included in this collection might support Windows targets, and will explicitly mention that in their documentation if they do so.
|
|
||||||
|
|
||||||
## Code of Conduct
|
|
||||||
|
|
||||||
We follow [Ansible Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html) in all our interactions within this project.
|
|
||||||
|
|
||||||
If you encounter abusive behavior violating the [Ansible Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html), please refer to the [policy violations](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html#policy-violations) section of the Code of Conduct for information on how to raise a complaint.
|
|
||||||
|
|
||||||
## Tested with Ansible
|
## Tested with Ansible
|
||||||
|
|
||||||
Tested with the current Ansible 2.9, ansible-base 2.10, ansible-core 2.11, ansible-core 2.12 releases and the current development version of ansible-core. Ansible versions before 2.9.10 are not supported.
|
Tested with the current Ansible 2.9, ansible-base 2.10 and ansible-core 2.11 releases and the current development version of ansible-core. Ansible versions before 2.9.10 are not supported.
|
||||||
|
|
||||||
## External requirements
|
## External requirements
|
||||||
|
|
||||||
@@ -29,9 +21,7 @@ Please check the included content on the [Ansible Galaxy page for this collectio
|
|||||||
|
|
||||||
## Using this collection
|
## Using this collection
|
||||||
|
|
||||||
This collection is shipped with the Ansible package. So if you have it installed, no more action is required.
|
Before using the General community collection, you need to install the collection with the `ansible-galaxy` CLI:
|
||||||
|
|
||||||
If you have a minimal installation (only Ansible Core installed) or you want to use the latest version of the collection along with the whole Ansible package, you need to install the collection from [Ansible Galaxy](https://galaxy.ansible.com/community/general) manually with the `ansible-galaxy` command-line tool:
|
|
||||||
|
|
||||||
ansible-galaxy collection install community.general
|
ansible-galaxy collection install community.general
|
||||||
|
|
||||||
@@ -42,79 +32,57 @@ collections:
|
|||||||
- name: community.general
|
- name: community.general
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that if you install the collection manually, it will not be upgraded automatically when you upgrade the Ansible package. To upgrade the collection to the latest available version, run the following command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ansible-galaxy collection install community.general --upgrade
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also install a specific version of the collection, for example, if you need to downgrade when something is broken in the latest version (please report an issue in this repository). Use the following syntax where `X.Y.Z` can be any [available version](https://galaxy.ansible.com/community/general):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ansible-galaxy collection install community.general:==X.Y.Z
|
|
||||||
```
|
|
||||||
|
|
||||||
See [Ansible Using collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) for more details.
|
See [Ansible Using collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) for more details.
|
||||||
|
|
||||||
## Contributing to this collection
|
## Contributing to this collection
|
||||||
|
|
||||||
The content of this collection is made by good people just like you, a community of individuals collaborating on making the world better through developing automation software.
|
If you want to develop new content for this collection or improve what is already here, the easiest way to work on the collection is to clone it into one of the configured [`COLLECTIONS_PATH`](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#collections-paths), and work on it there.
|
||||||
|
|
||||||
We are actively accepting new contributors.
|
For example, if you are working in the `~/dev` directory:
|
||||||
|
|
||||||
All types of contributions are very welcome.
|
```
|
||||||
|
cd ~/dev
|
||||||
You don't know how to start? Refer to our [contribution guide](https://github.com/ansible-collections/community.general/blob/stable-4/CONTRIBUTING.md)!
|
git clone git@github.com:ansible-collections/community.general.git collections/ansible_collections/community/general
|
||||||
|
export COLLECTIONS_PATH=$(pwd)/collections:$COLLECTIONS_PATH
|
||||||
The current maintainers are listed in the [commit-rights.md](https://github.com/ansible-collections/community.general/blob/stable-4/commit-rights.md#people) file. If you have questions or need help, feel free to mention them in the proposals.
|
```
|
||||||
|
|
||||||
You can find more information in the [developer guide for collections](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#contributing-to-collections), and in the [Ansible Community Guide](https://docs.ansible.com/ansible/latest/community/index.html).
|
You can find more information in the [developer guide for collections](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#contributing-to-collections), and in the [Ansible Community Guide](https://docs.ansible.com/ansible/latest/community/index.html).
|
||||||
|
|
||||||
Also for some notes specific to this collection see [our CONTRIBUTING documentation](https://github.com/ansible-collections/community.general/blob/stable-4/CONTRIBUTING.md).
|
|
||||||
|
|
||||||
### Running tests
|
### Running tests
|
||||||
|
|
||||||
See [here](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#testing-collections).
|
See [here](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#testing-collections).
|
||||||
|
|
||||||
## Collection maintenance
|
### Communication
|
||||||
|
|
||||||
To learn how to maintain / become a maintainer of this collection, refer to:
|
We have a dedicated Working Group for Ansible development.
|
||||||
|
|
||||||
* [Committer guidelines](https://github.com/ansible-collections/community.general/blob/stable-4/commit-rights.md).
|
You can find other people interested on the following Freenode IRC channels -
|
||||||
* [Maintainer guidelines](https://github.com/ansible/community-docs/blob/main/maintaining.rst).
|
- `#ansible` - For general use questions and support.
|
||||||
|
- `#ansible-devel` - For discussions on developer topics and code related to features or bugs.
|
||||||
It is necessary for maintainers of this collection to be subscribed to:
|
- `#ansible-community` - For discussions on community topics and community meetings.
|
||||||
|
|
||||||
* The collection itself (the `Watch` button → `All Activity` in the upper right corner of the repository's homepage).
|
|
||||||
* The "Changes Impacting Collection Contributors and Maintainers" [issue](https://github.com/ansible-collections/overview/issues/45).
|
|
||||||
|
|
||||||
They also should be subscribed to Ansible's [The Bullhorn newsletter](https://docs.ansible.com/ansible/devel/community/communication.html#the-bullhorn).
|
|
||||||
|
|
||||||
## Communication
|
|
||||||
|
|
||||||
We announce important development changes and releases through Ansible's [The Bullhorn newsletter](https://eepurl.com/gZmiEP). If you are a collection developer, be sure you are subscribed.
|
|
||||||
|
|
||||||
Join us in the `#ansible` (general use questions and support), `#ansible-community` (community and collection development questions), and other [IRC channels](https://docs.ansible.com/ansible/devel/community/communication.html#irc-channels) on [Libera.chat](https://libera.chat).
|
|
||||||
|
|
||||||
We take part in the global quarterly [Ansible Contributor Summit](https://github.com/ansible/community/wiki/Contributor-Summit) virtually or in-person. Track [The Bullhorn newsletter](https://eepurl.com/gZmiEP) and join us.
|
|
||||||
|
|
||||||
For more information about communities, meetings and agendas see [Community Wiki](https://github.com/ansible/community/wiki/Community).
|
For more information about communities, meetings and agendas see [Community Wiki](https://github.com/ansible/community/wiki/Community).
|
||||||
|
|
||||||
For more information about communication, refer to Ansible's the [Communication guide](https://docs.ansible.com/ansible/devel/community/communication.html).
|
For more information about [communication](https://docs.ansible.com/ansible/latest/community/communication.html)
|
||||||
|
|
||||||
## Publishing New Version
|
### Publishing New Version
|
||||||
|
|
||||||
See the [Releasing guidelines](https://github.com/ansible/community-docs/blob/main/releasing_collections.rst) to learn how to release this collection.
|
Basic instructions without release branches:
|
||||||
|
|
||||||
|
1. Create `changelogs/fragments/<version>.yml` with `release_summary:` section (which must be a string, not a list).
|
||||||
|
2. Run `antsibull-changelog release --collection-flatmap yes`
|
||||||
|
3. Make sure `CHANGELOG.rst` and `changelogs/changelog.yaml` are added to git, and the deleted fragments have been removed.
|
||||||
|
4. Tag the commit with `<version>`. Push changes and tag to the main repository.
|
||||||
|
|
||||||
## Release notes
|
## Release notes
|
||||||
|
|
||||||
See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-4/CHANGELOG.rst).
|
See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-3/CHANGELOG.rst).
|
||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
|
|
||||||
In general, we plan to release a major version every six months, and minor versions every two months. Major versions can contain breaking changes, while minor versions only contain new features and bugfixes.
|
See [this issue](https://github.com/ansible-collections/community.general/issues/582) for information on releasing, versioning and deprecation.
|
||||||
|
|
||||||
See [this issue](https://github.com/ansible-collections/community.general/issues/582) for information on releasing, versioning, and deprecation.
|
In general, we plan to release a major version every six months, and minor versions every two months. Major versions can contain breaking changes, while minor versions only contain new features and bugfixes.
|
||||||
|
|
||||||
## More information
|
## More information
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -67,8 +67,6 @@ Individuals who have been asked to become a part of this group have generally be
|
|||||||
|
|
||||||
| Name | GitHub ID | IRC Nick | Other |
|
| Name | GitHub ID | IRC Nick | Other |
|
||||||
| ------------------- | -------------------- | ------------------ | -------------------- |
|
| ------------------- | -------------------- | ------------------ | -------------------- |
|
||||||
| Alexei Znamensky | russoz | russoz | |
|
|
||||||
| Andrew Klychkov | andersson007 | andersson007_ | |
|
| Andrew Klychkov | andersson007 | andersson007_ | |
|
||||||
| Andrew Pantuso | Ajpantuso | ajpantuso | |
|
|
||||||
| Felix Fontein | felixfontein | felixfontein | |
|
| Felix Fontein | felixfontein | felixfontein | |
|
||||||
| John R Barker | gundalow | gundalow | |
|
| John R Barker | gundalow | gundalow | |
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
sections:
|
|
||||||
- title: Guides
|
|
||||||
toctree:
|
|
||||||
- filter_guide
|
|
||||||
- test_guide
|
|
||||||
@@ -1,784 +0,0 @@
|
|||||||
.. _ansible_collections.community.general.docsite.filter_guide:
|
|
||||||
|
|
||||||
community.general Filter Guide
|
|
||||||
==============================
|
|
||||||
|
|
||||||
The :ref:`community.general collection <plugins_in_community.general>` offers several useful filter plugins.
|
|
||||||
|
|
||||||
.. contents:: Topics
|
|
||||||
|
|
||||||
Paths
|
|
||||||
-----
|
|
||||||
|
|
||||||
The ``path_join`` filter has been added in ansible-base 2.10. If you want to use this filter, but also need to support Ansible 2.9, you can use ``community.general``'s ``path_join`` shim, ``community.general.path_join``. This filter redirects to ``path_join`` for ansible-base 2.10 and ansible-core 2.11 or newer, and re-implements the filter for Ansible 2.9.
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
# ansible-base 2.10 or newer:
|
|
||||||
path: {{ ('/etc', path, 'subdir', file) | path_join }}
|
|
||||||
|
|
||||||
# Also works with Ansible 2.9:
|
|
||||||
path: {{ ('/etc', path, 'subdir', file) | community.general.path_join }}
|
|
||||||
|
|
||||||
.. versionadded:: 3.0.0
|
|
||||||
|
|
||||||
Abstract transformations
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
Dictionaries
|
|
||||||
^^^^^^^^^^^^
|
|
||||||
|
|
||||||
You can use the ``dict_kv`` filter to create a single-entry dictionary with ``value | community.general.dict_kv(key)``:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Create a single-entry dictionary
|
|
||||||
debug:
|
|
||||||
msg: "{{ myvar | community.general.dict_kv('thatsmyvar') }}"
|
|
||||||
vars:
|
|
||||||
myvar: myvalue
|
|
||||||
|
|
||||||
- name: Create a list of dictionaries where the 'server' field is taken from a list
|
|
||||||
debug:
|
|
||||||
msg: >-
|
|
||||||
{{ myservers | map('community.general.dict_kv', 'server')
|
|
||||||
| map('combine', common_config) }}
|
|
||||||
vars:
|
|
||||||
common_config:
|
|
||||||
type: host
|
|
||||||
database: all
|
|
||||||
myservers:
|
|
||||||
- server1
|
|
||||||
- server2
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Create a single-entry dictionary] **************************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": {
|
|
||||||
"thatsmyvar": "myvalue"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TASK [Create a list of dictionaries where the 'server' field is taken from a list] *******
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": [
|
|
||||||
{
|
|
||||||
"database": "all",
|
|
||||||
"server": "server1",
|
|
||||||
"type": "host"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"database": "all",
|
|
||||||
"server": "server2",
|
|
||||||
"type": "host"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
.. versionadded:: 2.0.0
|
|
||||||
|
|
||||||
If you need to convert a list of key-value pairs to a dictionary, you can use the ``dict`` function. Unfortunately, this function cannot be used with ``map``. For this, the ``community.general.dict`` filter can be used:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Create a dictionary with the dict function
|
|
||||||
debug:
|
|
||||||
msg: "{{ dict([[1, 2], ['a', 'b']]) }}"
|
|
||||||
|
|
||||||
- name: Create a dictionary with the community.general.dict filter
|
|
||||||
debug:
|
|
||||||
msg: "{{ [[1, 2], ['a', 'b']] | community.general.dict }}"
|
|
||||||
|
|
||||||
- name: Create a list of dictionaries with map and the community.general.dict filter
|
|
||||||
debug:
|
|
||||||
msg: >-
|
|
||||||
{{ values | map('zip', ['k1', 'k2', 'k3'])
|
|
||||||
| map('map', 'reverse')
|
|
||||||
| map('community.general.dict') }}
|
|
||||||
vars:
|
|
||||||
values:
|
|
||||||
- - foo
|
|
||||||
- 23
|
|
||||||
- a
|
|
||||||
- - bar
|
|
||||||
- 42
|
|
||||||
- b
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Create a dictionary with the dict function] ****************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": {
|
|
||||||
"1": 2,
|
|
||||||
"a": "b"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TASK [Create a dictionary with the community.general.dict filter] ************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": {
|
|
||||||
"1": 2,
|
|
||||||
"a": "b"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TASK [Create a list of dictionaries with map and the community.general.dict filter] ******
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": [
|
|
||||||
{
|
|
||||||
"k1": "foo",
|
|
||||||
"k2": 23,
|
|
||||||
"k3": "a"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"k1": "bar",
|
|
||||||
"k2": 42,
|
|
||||||
"k3": "b"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
.. versionadded:: 3.0.0
|
|
||||||
|
|
||||||
Grouping
|
|
||||||
^^^^^^^^
|
|
||||||
|
|
||||||
If you have a list of dictionaries, the Jinja2 ``groupby`` filter allows to group the list by an attribute. This results in a list of ``(grouper, list)`` namedtuples, where ``list`` contains all dictionaries where the selected attribute equals ``grouper``. If you know that for every ``grouper``, there will be a most one entry in that list, you can use the ``community.general.groupby_as_dict`` filter to convert the original list into a dictionary which maps ``grouper`` to the corresponding dictionary.
|
|
||||||
|
|
||||||
One example is ``ansible_facts.mounts``, which is a list of dictionaries where each has one ``device`` element to indicate the device which is mounted. Therefore, ``ansible_facts.mounts | community.general.groupby_as_dict('device')`` is a dictionary mapping a device to the mount information:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Output mount facts grouped by device name
|
|
||||||
debug:
|
|
||||||
var: ansible_facts.mounts | community.general.groupby_as_dict('device')
|
|
||||||
|
|
||||||
- name: Output mount facts grouped by mount point
|
|
||||||
debug:
|
|
||||||
var: ansible_facts.mounts | community.general.groupby_as_dict('mount')
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Output mount facts grouped by device name] ******************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"ansible_facts.mounts | community.general.groupby_as_dict('device')": {
|
|
||||||
"/dev/sda1": {
|
|
||||||
"block_available": 2000,
|
|
||||||
"block_size": 4096,
|
|
||||||
"block_total": 2345,
|
|
||||||
"block_used": 345,
|
|
||||||
"device": "/dev/sda1",
|
|
||||||
"fstype": "ext4",
|
|
||||||
"inode_available": 500,
|
|
||||||
"inode_total": 512,
|
|
||||||
"inode_used": 12,
|
|
||||||
"mount": "/boot",
|
|
||||||
"options": "rw,relatime,data=ordered",
|
|
||||||
"size_available": 56821,
|
|
||||||
"size_total": 543210,
|
|
||||||
"uuid": "ab31cade-d9c1-484d-8482-8a4cbee5241a"
|
|
||||||
},
|
|
||||||
"/dev/sda2": {
|
|
||||||
"block_available": 1234,
|
|
||||||
"block_size": 4096,
|
|
||||||
"block_total": 12345,
|
|
||||||
"block_used": 11111,
|
|
||||||
"device": "/dev/sda2",
|
|
||||||
"fstype": "ext4",
|
|
||||||
"inode_available": 1111,
|
|
||||||
"inode_total": 1234,
|
|
||||||
"inode_used": 123,
|
|
||||||
"mount": "/",
|
|
||||||
"options": "rw,relatime",
|
|
||||||
"size_available": 42143,
|
|
||||||
"size_total": 543210,
|
|
||||||
"uuid": "abcdef01-2345-6789-0abc-def012345678"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TASK [Output mount facts grouped by mount point] ******************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"ansible_facts.mounts | community.general.groupby_as_dict('mount')": {
|
|
||||||
"/": {
|
|
||||||
"block_available": 1234,
|
|
||||||
"block_size": 4096,
|
|
||||||
"block_total": 12345,
|
|
||||||
"block_used": 11111,
|
|
||||||
"device": "/dev/sda2",
|
|
||||||
"fstype": "ext4",
|
|
||||||
"inode_available": 1111,
|
|
||||||
"inode_total": 1234,
|
|
||||||
"inode_used": 123,
|
|
||||||
"mount": "/",
|
|
||||||
"options": "rw,relatime",
|
|
||||||
"size_available": 42143,
|
|
||||||
"size_total": 543210,
|
|
||||||
"uuid": "bdf50b7d-4859-40af-8665-c637ee7a7808"
|
|
||||||
},
|
|
||||||
"/boot": {
|
|
||||||
"block_available": 2000,
|
|
||||||
"block_size": 4096,
|
|
||||||
"block_total": 2345,
|
|
||||||
"block_used": 345,
|
|
||||||
"device": "/dev/sda1",
|
|
||||||
"fstype": "ext4",
|
|
||||||
"inode_available": 500,
|
|
||||||
"inode_total": 512,
|
|
||||||
"inode_used": 12,
|
|
||||||
"mount": "/boot",
|
|
||||||
"options": "rw,relatime,data=ordered",
|
|
||||||
"size_available": 56821,
|
|
||||||
"size_total": 543210,
|
|
||||||
"uuid": "ab31cade-d9c1-484d-8482-8a4cbee5241a"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.. versionadded: 3.0.0
|
|
||||||
|
|
||||||
Merging lists of dictionaries
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
If you have two lists of dictionaries and want to combine them into a list of merged dictionaries, where two dictionaries are merged if they coincide in one attribute, you can use the ``lists_mergeby`` filter.
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Merge two lists by common attribute 'name'
|
|
||||||
debug:
|
|
||||||
var: list1 | community.general.lists_mergeby(list2, 'name')
|
|
||||||
vars:
|
|
||||||
list1:
|
|
||||||
- name: foo
|
|
||||||
extra: true
|
|
||||||
- name: bar
|
|
||||||
extra: false
|
|
||||||
- name: meh
|
|
||||||
extra: true
|
|
||||||
list2:
|
|
||||||
- name: foo
|
|
||||||
path: /foo
|
|
||||||
- name: baz
|
|
||||||
path: /bazzz
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Merge two lists by common attribute 'name'] ****************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"list1 | community.general.lists_mergeby(list2, 'name')": [
|
|
||||||
{
|
|
||||||
"extra": false,
|
|
||||||
"name": "bar"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "baz",
|
|
||||||
"path": "/bazzz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extra": true,
|
|
||||||
"name": "foo",
|
|
||||||
"path": "/foo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"extra": true,
|
|
||||||
"name": "meh"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
.. versionadded: 2.0.0
|
|
||||||
|
|
||||||
Working with times
|
|
||||||
------------------
|
|
||||||
|
|
||||||
The ``to_time_unit`` filter allows to convert times from a human-readable string to a unit. For example, ``'4h 30min 12second' | community.general.to_time_unit('hour')`` gives the number of hours that correspond to 4 hours, 30 minutes and 12 seconds.
|
|
||||||
|
|
||||||
There are shorthands to directly convert to various units, like ``to_hours``, ``to_minutes``, ``to_seconds``, and so on. The following table lists all units that can be used:
|
|
||||||
|
|
||||||
.. list-table:: Units
|
|
||||||
:widths: 25 25 25 25
|
|
||||||
:header-rows: 1
|
|
||||||
|
|
||||||
* - Unit name
|
|
||||||
- Unit value in seconds
|
|
||||||
- Unit strings for filter
|
|
||||||
- Shorthand filter
|
|
||||||
* - Millisecond
|
|
||||||
- 1/1000 second
|
|
||||||
- ``ms``, ``millisecond``, ``milliseconds``, ``msec``, ``msecs``, ``msecond``, ``mseconds``
|
|
||||||
- ``to_milliseconds``
|
|
||||||
* - Second
|
|
||||||
- 1 second
|
|
||||||
- ``s``, ``sec``, ``secs``, ``second``, ``seconds``
|
|
||||||
- ``to_seconds``
|
|
||||||
* - Minute
|
|
||||||
- 60 seconds
|
|
||||||
- ``m``, ``min``, ``mins``, ``minute``, ``minutes``
|
|
||||||
- ``to_minutes``
|
|
||||||
* - Hour
|
|
||||||
- 60*60 seconds
|
|
||||||
- ``h``, ``hour``, ``hours``
|
|
||||||
- ``to_hours``
|
|
||||||
* - Day
|
|
||||||
- 24*60*60 seconds
|
|
||||||
- ``d``, ``day``, ``days``
|
|
||||||
- ``to_days``
|
|
||||||
* - Week
|
|
||||||
- 7*24*60*60 seconds
|
|
||||||
- ``w``, ``week``, ``weeks``
|
|
||||||
- ``to_weeks``
|
|
||||||
* - Month
|
|
||||||
- 30*24*60*60 seconds
|
|
||||||
- ``mo``, ``month``, ``months``
|
|
||||||
- ``to_months``
|
|
||||||
* - Year
|
|
||||||
- 365*24*60*60 seconds
|
|
||||||
- ``y``, ``year``, ``years``
|
|
||||||
- ``to_years``
|
|
||||||
|
|
||||||
Note that months and years are using a simplified representation: a month is 30 days, and a year is 365 days. If you need different definitions of months or years, you can pass them as keyword arguments. For example, if you want a year to be 365.25 days, and a month to be 30.5 days, you can write ``'11months 4' | community.general.to_years(year=365.25, month=30.5)``. These keyword arguments can be specified to ``to_time_unit`` and to all shorthand filters.
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Convert string to seconds
|
|
||||||
debug:
|
|
||||||
msg: "{{ '30h 20m 10s 123ms' | community.general.to_time_unit('seconds') }}"
|
|
||||||
|
|
||||||
- name: Convert string to hours
|
|
||||||
debug:
|
|
||||||
msg: "{{ '30h 20m 10s 123ms' | community.general.to_hours }}"
|
|
||||||
|
|
||||||
- name: Convert string to years (using 365.25 days == 1 year)
|
|
||||||
debug:
|
|
||||||
msg: "{{ '400d 15h' | community.general.to_years(year=365.25) }}"
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Convert string to seconds] **********************************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": "109210.123"
|
|
||||||
}
|
|
||||||
|
|
||||||
TASK [Convert string to hours] ************************************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": "30.336145277778"
|
|
||||||
}
|
|
||||||
|
|
||||||
TASK [Convert string to years (using 365.25 days == 1 year)] ******************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": "1.096851471595"
|
|
||||||
}
|
|
||||||
|
|
||||||
.. versionadded: 0.2.0
|
|
||||||
|
|
||||||
Working with versions
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
If you need to sort a list of version numbers, the Jinja ``sort`` filter is problematic. Since it sorts lexicographically, ``2.10`` will come before ``2.9``. To treat version numbers correctly, you can use the ``version_sort`` filter:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Sort list by version number
|
|
||||||
debug:
|
|
||||||
var: ansible_versions | community.general.version_sort
|
|
||||||
vars:
|
|
||||||
ansible_versions:
|
|
||||||
- '2.8.0'
|
|
||||||
- '2.11.0'
|
|
||||||
- '2.7.0'
|
|
||||||
- '2.10.0'
|
|
||||||
- '2.9.0'
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Sort list by version number] ********************************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"ansible_versions | community.general.version_sort": [
|
|
||||||
"2.7.0",
|
|
||||||
"2.8.0",
|
|
||||||
"2.9.0",
|
|
||||||
"2.10.0",
|
|
||||||
"2.11.0"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
.. versionadded: 2.2.0
|
|
||||||
|
|
||||||
Creating identifiers
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
The following filters allow to create identifiers.
|
|
||||||
|
|
||||||
Hashids
|
|
||||||
^^^^^^^
|
|
||||||
|
|
||||||
`Hashids <https://hashids.org/>`_ allow to convert sequences of integers to short unique string identifiers. This filter needs the `hashids Python library <https://pypi.org/project/hashids/>`_ installed on the controller.
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: "Create hashid"
|
|
||||||
debug:
|
|
||||||
msg: "{{ [1234, 5, 6] | community.general.hashids_encode }}"
|
|
||||||
|
|
||||||
- name: "Decode hashid"
|
|
||||||
debug:
|
|
||||||
msg: "{{ 'jm2Cytn' | community.general.hashids_decode }}"
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Create hashid] **********************************************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": "jm2Cytn"
|
|
||||||
}
|
|
||||||
|
|
||||||
TASK [Decode hashid] **********************************************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": [
|
|
||||||
1234,
|
|
||||||
5,
|
|
||||||
6
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
The hashids filters accept keyword arguments to allow fine-tuning the hashids generated:
|
|
||||||
|
|
||||||
:salt: String to use as salt when hashing.
|
|
||||||
:alphabet: String of 16 or more unique characters to produce a hash.
|
|
||||||
:min_length: Minimum length of hash produced.
|
|
||||||
|
|
||||||
.. versionadded: 3.0.0
|
|
||||||
|
|
||||||
Random MACs
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
You can use the ``random_mac`` filter to complete a partial `MAC address <https://en.wikipedia.org/wiki/MAC_address>`_ to a random 6-byte MAC address.
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: "Create a random MAC starting with ff:"
|
|
||||||
debug:
|
|
||||||
msg: "{{ 'FF' | community.general.random_mac }}"
|
|
||||||
|
|
||||||
- name: "Create a random MAC starting with 00:11:22:"
|
|
||||||
debug:
|
|
||||||
msg: "{{ '00:11:22' | community.general.random_mac }}"
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Create a random MAC starting with ff:] **********************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": "ff:69:d3:78:7f:b4"
|
|
||||||
}
|
|
||||||
|
|
||||||
TASK [Create a random MAC starting with 00:11:22:] ****************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": "00:11:22:71:5d:3b"
|
|
||||||
}
|
|
||||||
|
|
||||||
You can also initialize the random number generator from a seed to create random-but-idempotent MAC addresses:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
"{{ '52:54:00' | community.general.random_mac(seed=inventory_hostname) }}"
|
|
||||||
|
|
||||||
Conversions
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Parsing CSV files
|
|
||||||
^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Ansible offers the :ref:`community.general.read_csv module <ansible_collections.community.general.read_csv_module>` to read CSV files. Sometimes you need to convert strings to CSV files instead. For this, the ``from_csv`` filter exists.
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: "Parse CSV from string"
|
|
||||||
debug:
|
|
||||||
msg: "{{ csv_string | community.general.from_csv }}"
|
|
||||||
vars:
|
|
||||||
csv_string: |
|
|
||||||
foo,bar,baz
|
|
||||||
1,2,3
|
|
||||||
you,this,then
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Parse CSV from string] **************************************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": [
|
|
||||||
{
|
|
||||||
"bar": "2",
|
|
||||||
"baz": "3",
|
|
||||||
"foo": "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bar": "this",
|
|
||||||
"baz": "then",
|
|
||||||
"foo": "you"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
The ``from_csv`` filter has several keyword arguments to control its behavior:
|
|
||||||
|
|
||||||
:dialect: Dialect of the CSV file. Default is ``excel``. Other possible choices are ``excel-tab`` and ``unix``. If one of ``delimiter``, ``skipinitialspace`` or ``strict`` is specified, ``dialect`` is ignored.
|
|
||||||
:fieldnames: A set of column names to use. If not provided, the first line of the CSV is assumed to contain the column names.
|
|
||||||
:delimiter: Sets the delimiter to use. Default depends on the dialect used.
|
|
||||||
:skipinitialspace: Set to ``true`` to ignore space directly after the delimiter. Default depends on the dialect used (usually ``false``).
|
|
||||||
:strict: Set to ``true`` to error out on invalid CSV input.
|
|
||||||
|
|
||||||
.. versionadded: 3.0.0
|
|
||||||
|
|
||||||
Converting to JSON
|
|
||||||
^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
`JC <https://pypi.org/project/jc/>`_ is a CLI tool and Python library which allows to interpret output of various CLI programs as JSON. It is also available as a filter in community.general. This filter needs the `jc Python library <https://pypi.org/project/jc/>`_ installed on the controller.
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Run 'ls' to list files in /
|
|
||||||
command: ls /
|
|
||||||
register: result
|
|
||||||
|
|
||||||
- name: Parse the ls output
|
|
||||||
debug:
|
|
||||||
msg: "{{ result.stdout | community.general.jc('ls') }}"
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Run 'ls' to list files in /] ********************************************************
|
|
||||||
changed: [localhost]
|
|
||||||
|
|
||||||
TASK [Parse the ls output] ****************************************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": [
|
|
||||||
{
|
|
||||||
"filename": "bin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "boot"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "dev"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "etc"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "home"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "lib"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "proc"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "root"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "run"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "tmp"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
.. versionadded: 2.0.0
|
|
||||||
|
|
||||||
.. _ansible_collections.community.general.docsite.json_query_filter:
|
|
||||||
|
|
||||||
Selecting JSON data: JSON queries
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
To select a single element or a data subset from a complex data structure in JSON format (for example, Ansible facts), use the ``json_query`` filter. The ``json_query`` filter lets you query a complex JSON structure and iterate over it using a loop structure.
|
|
||||||
|
|
||||||
.. note:: You must manually install the **jmespath** dependency on the Ansible controller before using this filter. This filter is built upon **jmespath**, and you can use the same syntax. For examples, see `jmespath examples <http://jmespath.org/examples.html>`_.
|
|
||||||
|
|
||||||
Consider this data structure:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
{
|
|
||||||
"domain_definition": {
|
|
||||||
"domain": {
|
|
||||||
"cluster": [
|
|
||||||
{
|
|
||||||
"name": "cluster1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "cluster2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"server": [
|
|
||||||
{
|
|
||||||
"name": "server11",
|
|
||||||
"cluster": "cluster1",
|
|
||||||
"port": "8080"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "server12",
|
|
||||||
"cluster": "cluster1",
|
|
||||||
"port": "8090"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "server21",
|
|
||||||
"cluster": "cluster2",
|
|
||||||
"port": "9080"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "server22",
|
|
||||||
"cluster": "cluster2",
|
|
||||||
"port": "9090"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"library": [
|
|
||||||
{
|
|
||||||
"name": "lib1",
|
|
||||||
"target": "cluster1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "lib2",
|
|
||||||
"target": "cluster2"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
To extract all clusters from this structure, you can use the following query:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Display all cluster names
|
|
||||||
ansible.builtin.debug:
|
|
||||||
var: item
|
|
||||||
loop: "{{ domain_definition | community.general.json_query('domain.cluster[*].name') }}"
|
|
||||||
|
|
||||||
To extract all server names:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Display all server names
|
|
||||||
ansible.builtin.debug:
|
|
||||||
var: item
|
|
||||||
loop: "{{ domain_definition | community.general.json_query('domain.server[*].name') }}"
|
|
||||||
|
|
||||||
To extract ports from cluster1:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Display all ports from cluster1
|
|
||||||
ansible.builtin.debug:
|
|
||||||
var: item
|
|
||||||
loop: "{{ domain_definition | community.general.json_query(server_name_cluster1_query) }}"
|
|
||||||
vars:
|
|
||||||
server_name_cluster1_query: "domain.server[?cluster=='cluster1'].port"
|
|
||||||
|
|
||||||
.. note:: You can use a variable to make the query more readable.
|
|
||||||
|
|
||||||
To print out the ports from cluster1 in a comma separated string:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Display all ports from cluster1 as a string
|
|
||||||
ansible.builtin.debug:
|
|
||||||
msg: "{{ domain_definition | community.general.json_query('domain.server[?cluster==`cluster1`].port') | join(', ') }}"
|
|
||||||
|
|
||||||
.. note:: In the example above, quoting literals using backticks avoids escaping quotes and maintains readability.
|
|
||||||
|
|
||||||
You can use YAML `single quote escaping <https://yaml.org/spec/current.html#id2534365>`_:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Display all ports from cluster1
|
|
||||||
ansible.builtin.debug:
|
|
||||||
var: item
|
|
||||||
loop: "{{ domain_definition | community.general.json_query('domain.server[?cluster==''cluster1''].port') }}"
|
|
||||||
|
|
||||||
.. note:: Escaping single quotes within single quotes in YAML is done by doubling the single quote.
|
|
||||||
|
|
||||||
To get a hash map with all ports and names of a cluster:
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Display all server ports and names from cluster1
|
|
||||||
ansible.builtin.debug:
|
|
||||||
var: item
|
|
||||||
loop: "{{ domain_definition | community.general.json_query(server_name_cluster1_query) }}"
|
|
||||||
vars:
|
|
||||||
server_name_cluster1_query: "domain.server[?cluster=='cluster2'].{name: name, port: port}"
|
|
||||||
|
|
||||||
To extract ports from all clusters with name starting with 'server1':
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Display all ports from cluster1
|
|
||||||
ansible.builtin.debug:
|
|
||||||
msg: "{{ domain_definition | to_json | from_json | community.general.json_query(server_name_query) }}"
|
|
||||||
vars:
|
|
||||||
server_name_query: "domain.server[?starts_with(name,'server1')].port"
|
|
||||||
|
|
||||||
To extract ports from all clusters with name containing 'server1':
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Display all ports from cluster1
|
|
||||||
ansible.builtin.debug:
|
|
||||||
msg: "{{ domain_definition | to_json | from_json | community.general.json_query(server_name_query) }}"
|
|
||||||
vars:
|
|
||||||
server_name_query: "domain.server[?contains(name,'server1')].port"
|
|
||||||
|
|
||||||
.. note:: while using ``starts_with`` and ``contains``, you have to use `` to_json | from_json `` filter for correct parsing of data structure.
|
|
||||||
|
|
||||||
Working with Unicode
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
`Unicode <https://unicode.org/main.html>`_ makes it possible to produce two strings which may be visually equivalent, but are comprised of distinctly different characters/character sequences. To address this ``Unicode`` defines `normalization forms <https://unicode.org/reports/tr15/>`_ which avoid these distinctions by choosing a unique character sequence for a given visual representation.
|
|
||||||
|
|
||||||
You can use the ``community.general.unicode_normalize`` filter to normalize ``Unicode`` strings within your playbooks.
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Compare Unicode representations
|
|
||||||
debug:
|
|
||||||
msg: "{{ with_combining_character | community.general.unicode_normalize == without_combining_character }}"
|
|
||||||
vars:
|
|
||||||
with_combining_character: "{{ 'Mayagu\u0308ez' }}"
|
|
||||||
without_combining_character: Mayagüez
|
|
||||||
|
|
||||||
This produces:
|
|
||||||
|
|
||||||
.. code-block:: ansible-output
|
|
||||||
|
|
||||||
TASK [Compare Unicode representations] ********************************************************
|
|
||||||
ok: [localhost] => {
|
|
||||||
"msg": true
|
|
||||||
}
|
|
||||||
|
|
||||||
The ``community.general.unicode_normalize`` filter accepts a keyword argument to select the ``Unicode`` form used to normalize the input string.
|
|
||||||
|
|
||||||
:form: One of ``'NFC'`` (default), ``'NFD'``, ``'NFKC'``, or ``'NFKD'``. See the `Unicode reference <https://unicode.org/reports/tr15/>`_ for more information.
|
|
||||||
|
|
||||||
.. versionadded:: 3.7.0
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
.. _ansible_collections.community.general.docsite.test_guide:
|
|
||||||
|
|
||||||
community.general Test (Plugin) Guide
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
The :ref:`community.general collection <plugins_in_community.general>` offers currently one test plugin.
|
|
||||||
|
|
||||||
.. contents:: Topics
|
|
||||||
|
|
||||||
Feature Tests
|
|
||||||
-------------
|
|
||||||
|
|
||||||
The ``a_module`` test allows to check whether a given string refers to an existing module or action plugin. This can be useful in roles, which can use this to ensure that required modules are present ahead of time.
|
|
||||||
|
|
||||||
.. code-block:: yaml+jinja
|
|
||||||
|
|
||||||
- name: Make sure that community.aws.route53 is available
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- >
|
|
||||||
'community.aws.route53' is community.general.a_module
|
|
||||||
|
|
||||||
- name: Make sure that community.general.does_not_exist is not a module or action plugin
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- "'community.general.does_not_exist' is not community.general.a_module"
|
|
||||||
|
|
||||||
.. versionadded:: 4.0.0
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace: community
|
namespace: community
|
||||||
name: general
|
name: general
|
||||||
version: 4.0.2
|
version: 3.0.0
|
||||||
readme: README.md
|
readme: README.md
|
||||||
authors:
|
authors:
|
||||||
- Ansible (https://github.com/ansible)
|
- Ansible (https://github.com/ansible)
|
||||||
|
|||||||
131
meta/runtime.yml
131
meta/runtime.yml
@@ -1,5 +1,31 @@
|
|||||||
---
|
---
|
||||||
requires_ansible: '>=2.9.10'
|
requires_ansible: '>=2.9.10'
|
||||||
|
action_groups:
|
||||||
|
ovirt:
|
||||||
|
- ovirt_affinity_label_facts
|
||||||
|
- ovirt_api_facts
|
||||||
|
- ovirt_cluster_facts
|
||||||
|
- ovirt_datacenter_facts
|
||||||
|
- ovirt_disk_facts
|
||||||
|
- ovirt_event_facts
|
||||||
|
- ovirt_external_provider_facts
|
||||||
|
- ovirt_group_facts
|
||||||
|
- ovirt_host_facts
|
||||||
|
- ovirt_host_storage_facts
|
||||||
|
- ovirt_network_facts
|
||||||
|
- ovirt_nic_facts
|
||||||
|
- ovirt_permission_facts
|
||||||
|
- ovirt_quota_facts
|
||||||
|
- ovirt_scheduling_policy_facts
|
||||||
|
- ovirt_snapshot_facts
|
||||||
|
- ovirt_storage_domain_facts
|
||||||
|
- ovirt_storage_template_facts
|
||||||
|
- ovirt_storage_vm_facts
|
||||||
|
- ovirt_tag_facts
|
||||||
|
- ovirt_template_facts
|
||||||
|
- ovirt_user_facts
|
||||||
|
- ovirt_vm_facts
|
||||||
|
- ovirt_vmpool_facts
|
||||||
plugin_routing:
|
plugin_routing:
|
||||||
connection:
|
connection:
|
||||||
docker:
|
docker:
|
||||||
@@ -11,12 +37,6 @@ plugin_routing:
|
|||||||
redirect: community.google.gcp_storage_file
|
redirect: community.google.gcp_storage_file
|
||||||
hashi_vault:
|
hashi_vault:
|
||||||
redirect: community.hashi_vault.hashi_vault
|
redirect: community.hashi_vault.hashi_vault
|
||||||
nios:
|
|
||||||
redirect: infoblox.nios_modules.nios_lookup
|
|
||||||
nios_next_ip:
|
|
||||||
redirect: infoblox.nios_modules.nios_next_ip
|
|
||||||
nios_next_network:
|
|
||||||
redirect: infoblox.nios_modules.nios_next_network
|
|
||||||
modules:
|
modules:
|
||||||
ali_instance_facts:
|
ali_instance_facts:
|
||||||
tombstone:
|
tombstone:
|
||||||
@@ -121,13 +141,11 @@ plugin_routing:
|
|||||||
gcp_forwarding_rule:
|
gcp_forwarding_rule:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 2.0.0
|
removal_version: 2.0.0
|
||||||
warning_text: Use google.cloud.gcp_compute_forwarding_rule or google.cloud.gcp_compute_global_forwarding_rule
|
warning_text: Use google.cloud.gcp_compute_forwarding_rule or google.cloud.gcp_compute_global_forwarding_rule instead.
|
||||||
instead.
|
|
||||||
gcp_healthcheck:
|
gcp_healthcheck:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 2.0.0
|
removal_version: 2.0.0
|
||||||
warning_text: Use google.cloud.gcp_compute_health_check, google.cloud.gcp_compute_http_health_check
|
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.
|
||||||
or google.cloud.gcp_compute_https_health_check instead.
|
|
||||||
gcp_target_proxy:
|
gcp_target_proxy:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 2.0.0
|
removal_version: 2.0.0
|
||||||
@@ -138,22 +156,37 @@ plugin_routing:
|
|||||||
warning_text: Use google.cloud.gcp_compute_url_map instead.
|
warning_text: Use google.cloud.gcp_compute_url_map instead.
|
||||||
gcpubsub:
|
gcpubsub:
|
||||||
redirect: community.google.gcpubsub
|
redirect: community.google.gcpubsub
|
||||||
|
gcpubsub_info:
|
||||||
|
redirect: community.google.gcpubsub_info
|
||||||
gcpubsub_facts:
|
gcpubsub_facts:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 3.0.0
|
removal_version: 3.0.0
|
||||||
warning_text: Use community.google.gcpubsub_info instead.
|
warning_text: Use community.google.gcpubsub_info instead.
|
||||||
gcpubsub_info:
|
|
||||||
redirect: community.google.gcpubsub_info
|
|
||||||
gcspanner:
|
gcspanner:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 2.0.0
|
removal_version: 2.0.0
|
||||||
warning_text: Use google.cloud.gcp_spanner_database and/or google.cloud.gcp_spanner_instance
|
warning_text: Use google.cloud.gcp_spanner_database and/or google.cloud.gcp_spanner_instance instead.
|
||||||
instead.
|
|
||||||
github_hooks:
|
github_hooks:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 2.0.0
|
removal_version: 2.0.0
|
||||||
warning_text: Use community.general.github_webhook and community.general.github_webhook_info
|
warning_text: Use community.general.github_webhook and community.general.github_webhook_info instead.
|
||||||
instead.
|
# Adding tombstones burns the old name, so we simply remove the entries:
|
||||||
|
# gluster_heal_info:
|
||||||
|
# tombstone:
|
||||||
|
# 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:
|
||||||
|
# tombstone:
|
||||||
|
# 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:
|
||||||
|
# tombstone:
|
||||||
|
# removal_version: 3.0.0
|
||||||
|
# warning_text: The gluster modules have migrated to the gluster.gluster collection. Use gluster.gluster.gluster_volume instead.
|
||||||
|
# helm:
|
||||||
|
# tombstone:
|
||||||
|
# removal_version: 3.0.0
|
||||||
|
# warning_text: Use community.kubernetes.helm instead.
|
||||||
hetzner_failover_ip:
|
hetzner_failover_ip:
|
||||||
redirect: community.hrobot.failover_ip
|
redirect: community.hrobot.failover_ip
|
||||||
hetzner_failover_ip_info:
|
hetzner_failover_ip_info:
|
||||||
@@ -201,13 +234,11 @@ plugin_routing:
|
|||||||
logicmonitor:
|
logicmonitor:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 1.0.0
|
removal_version: 1.0.0
|
||||||
warning_text: The logicmonitor_facts module is no longer maintained and the
|
warning_text: The logicmonitor_facts module is no longer maintained and the API used has been disabled in 2017.
|
||||||
API used has been disabled in 2017.
|
|
||||||
logicmonitor_facts:
|
logicmonitor_facts:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 1.0.0
|
removal_version: 1.0.0
|
||||||
warning_text: The logicmonitor_facts module is no longer maintained and the
|
warning_text: The logicmonitor_facts module is no longer maintained and the API used has been disabled in 2017.
|
||||||
API used has been disabled in 2017.
|
|
||||||
memset_memstore_facts:
|
memset_memstore_facts:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 3.0.0
|
removal_version: 3.0.0
|
||||||
@@ -256,38 +287,6 @@ plugin_routing:
|
|||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 3.0.0
|
removal_version: 3.0.0
|
||||||
warning_text: Use community.general.nginx_status_info instead.
|
warning_text: Use community.general.nginx_status_info instead.
|
||||||
nios_a_record:
|
|
||||||
redirect: infoblox.nios_modules.nios_a_record
|
|
||||||
nios_aaaa_record:
|
|
||||||
redirect: infoblox.nios_modules.nios_aaaa_record
|
|
||||||
nios_cname_record:
|
|
||||||
redirect: infoblox.nios_modules.nios_cname_record
|
|
||||||
nios_dns_view:
|
|
||||||
redirect: infoblox.nios_modules.nios_dns_view
|
|
||||||
nios_fixed_address:
|
|
||||||
redirect: infoblox.nios_modules.nios_fixed_address
|
|
||||||
nios_host_record:
|
|
||||||
redirect: infoblox.nios_modules.nios_host_record
|
|
||||||
nios_member:
|
|
||||||
redirect: infoblox.nios_modules.nios_member
|
|
||||||
nios_mx_record:
|
|
||||||
redirect: infoblox.nios_modules.nios_mx_record
|
|
||||||
nios_naptr_record:
|
|
||||||
redirect: infoblox.nios_modules.nios_naptr_record
|
|
||||||
nios_network:
|
|
||||||
redirect: infoblox.nios_modules.nios_network
|
|
||||||
nios_network_view:
|
|
||||||
redirect: infoblox.nios_modules.nios_network_view
|
|
||||||
nios_nsgroup:
|
|
||||||
redirect: infoblox.nios_modules.nios_nsgroup
|
|
||||||
nios_ptr_record:
|
|
||||||
redirect: infoblox.nios_modules.nios_ptr_record
|
|
||||||
nios_srv_record:
|
|
||||||
redirect: infoblox.nios_modules.nios_srv_record
|
|
||||||
nios_txt_record:
|
|
||||||
redirect: infoblox.nios_modules.nios_txt_record
|
|
||||||
nios_zone:
|
|
||||||
redirect: infoblox.nios_modules.nios_zone
|
|
||||||
ome_device_info:
|
ome_device_info:
|
||||||
redirect: dellemc.openmanage.ome_device_info
|
redirect: dellemc.openmanage.ome_device_info
|
||||||
one_image_facts:
|
one_image_facts:
|
||||||
@@ -321,8 +320,7 @@ plugin_routing:
|
|||||||
oneview_logical_interconnect_group_facts:
|
oneview_logical_interconnect_group_facts:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 3.0.0
|
removal_version: 3.0.0
|
||||||
warning_text: Use community.general.oneview_logical_interconnect_group_info
|
warning_text: Use community.general.oneview_logical_interconnect_group_info instead.
|
||||||
instead.
|
|
||||||
oneview_network_set_facts:
|
oneview_network_set_facts:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 3.0.0
|
removal_version: 3.0.0
|
||||||
@@ -479,10 +477,10 @@ plugin_routing:
|
|||||||
redirect: community.postgresql.postgresql_table
|
redirect: community.postgresql.postgresql_table
|
||||||
postgresql_tablespace:
|
postgresql_tablespace:
|
||||||
redirect: community.postgresql.postgresql_tablespace
|
redirect: community.postgresql.postgresql_tablespace
|
||||||
postgresql_user:
|
|
||||||
redirect: community.postgresql.postgresql_user
|
|
||||||
postgresql_user_obj_stat_info:
|
postgresql_user_obj_stat_info:
|
||||||
redirect: community.postgresql.postgresql_user_obj_stat_info
|
redirect: community.postgresql.postgresql_user_obj_stat_info
|
||||||
|
postgresql_user:
|
||||||
|
redirect: community.postgresql.postgresql_user
|
||||||
purefa_facts:
|
purefa_facts:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 3.0.0
|
removal_version: 3.0.0
|
||||||
@@ -570,11 +568,11 @@ plugin_routing:
|
|||||||
redirect: community.kubevirt.kubevirt_common_options
|
redirect: community.kubevirt.kubevirt_common_options
|
||||||
kubevirt_vm_options:
|
kubevirt_vm_options:
|
||||||
redirect: community.kubevirt.kubevirt_vm_options
|
redirect: community.kubevirt.kubevirt_vm_options
|
||||||
nios:
|
|
||||||
redirect: infoblox.nios_modules.nios
|
|
||||||
postgresql:
|
postgresql:
|
||||||
redirect: community.postgresql.postgresql
|
redirect: community.postgresql.postgresql
|
||||||
module_utils:
|
module_utils:
|
||||||
|
remote_management.dellemc.dellemc_idrac:
|
||||||
|
redirect: dellemc.openmanage.dellemc_idrac
|
||||||
docker.common:
|
docker.common:
|
||||||
redirect: community.docker.common
|
redirect: community.docker.common
|
||||||
docker.swarm:
|
docker.swarm:
|
||||||
@@ -589,30 +587,23 @@ plugin_routing:
|
|||||||
redirect: community.hrobot.robot
|
redirect: community.hrobot.robot
|
||||||
kubevirt:
|
kubevirt:
|
||||||
redirect: community.kubevirt.kubevirt
|
redirect: community.kubevirt.kubevirt
|
||||||
net_tools.nios.api:
|
|
||||||
redirect: infoblox.nios_modules.api
|
|
||||||
postgresql:
|
|
||||||
redirect: community.postgresql.postgresql
|
|
||||||
remote_management.dellemc.dellemc_idrac:
|
|
||||||
redirect: dellemc.openmanage.dellemc_idrac
|
|
||||||
remote_management.dellemc.ome:
|
remote_management.dellemc.ome:
|
||||||
redirect: dellemc.openmanage.ome
|
redirect: dellemc.openmanage.ome
|
||||||
|
postgresql:
|
||||||
|
redirect: community.postgresql.postgresql
|
||||||
callback:
|
callback:
|
||||||
actionable:
|
actionable:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 2.0.0
|
removal_version: 2.0.0
|
||||||
warning_text: Use the 'default' callback plugin with 'display_skipped_hosts
|
warning_text: Use the 'default' callback plugin with 'display_skipped_hosts = no' and 'display_ok_hosts = no' options.
|
||||||
= no' and 'display_ok_hosts = no' options.
|
|
||||||
full_skip:
|
full_skip:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 2.0.0
|
removal_version: 2.0.0
|
||||||
warning_text: Use the 'default' callback plugin with 'display_skipped_hosts
|
warning_text: Use the 'default' callback plugin with 'display_skipped_hosts = no' option.
|
||||||
= no' option.
|
|
||||||
stderr:
|
stderr:
|
||||||
tombstone:
|
tombstone:
|
||||||
removal_version: 2.0.0
|
removal_version: 2.0.0
|
||||||
warning_text: Use the 'default' callback plugin with 'display_failed_stderr
|
warning_text: Use the 'default' callback plugin with 'display_failed_stderr = yes' option.
|
||||||
= yes' option.
|
|
||||||
inventory:
|
inventory:
|
||||||
docker_machine:
|
docker_machine:
|
||||||
redirect: community.docker.docker_machine
|
redirect: community.docker.docker_machine
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright: (c) 2020, quidame <quidame@poivron.org>
|
# Copyright: (c) 2020, quidame <quidame@poivron.org>
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
@@ -8,7 +7,7 @@ __metaclass__ = type
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
from ansible.plugins.action import ActionBase
|
from ansible.plugins.action import ActionBase
|
||||||
from ansible.errors import AnsibleActionFail, AnsibleConnectionFailure
|
from ansible.errors import AnsibleError, AnsibleActionFail, AnsibleConnectionFailure
|
||||||
from ansible.utils.vars import merge_hash
|
from ansible.utils.vars import merge_hash
|
||||||
from ansible.utils.display import Display
|
from ansible.utils.display import Display
|
||||||
|
|
||||||
@@ -41,27 +40,19 @@ class ActionModule(ActionBase):
|
|||||||
"(=%s) to 0, and 'async' (=%s) to a value >2 and not greater than "
|
"(=%s) to 0, and 'async' (=%s) to a value >2 and not greater than "
|
||||||
"'ansible_timeout' (=%s) (recommended).")
|
"'ansible_timeout' (=%s) (recommended).")
|
||||||
|
|
||||||
def _async_result(self, async_status_args, task_vars, timeout):
|
def _async_result(self, module_args, task_vars, timeout):
|
||||||
'''
|
'''
|
||||||
Retrieve results of the asynchonous task, and display them in place of
|
Retrieve results of the asynchonous task, and display them in place of
|
||||||
the async wrapper results (those with the ansible_job_id key).
|
the async wrapper results (those with the ansible_job_id key).
|
||||||
'''
|
'''
|
||||||
async_status = self._task.copy()
|
|
||||||
async_status.args = async_status_args
|
|
||||||
async_status.action = 'ansible.builtin.async_status'
|
|
||||||
async_status.async_val = 0
|
|
||||||
async_action = self._shared_loader_obj.action_loader.get(
|
|
||||||
async_status.action, task=async_status, connection=self._connection,
|
|
||||||
play_context=self._play_context, loader=self._loader, templar=self._templar,
|
|
||||||
shared_loader_obj=self._shared_loader_obj)
|
|
||||||
|
|
||||||
if async_status.args['mode'] == 'cleanup':
|
|
||||||
return async_action.run(task_vars=task_vars)
|
|
||||||
|
|
||||||
# At least one iteration is required, even if timeout is 0.
|
# At least one iteration is required, even if timeout is 0.
|
||||||
for dummy in range(max(1, timeout)):
|
for i in range(max(1, timeout)):
|
||||||
async_result = async_action.run(task_vars=task_vars)
|
async_result = self._execute_module(
|
||||||
if async_result.get('finished', 0) == 1:
|
module_name='ansible.builtin.async_status',
|
||||||
|
module_args=module_args,
|
||||||
|
task_vars=task_vars,
|
||||||
|
wrap_async=False)
|
||||||
|
if async_result['finished'] == 1:
|
||||||
break
|
break
|
||||||
time.sleep(min(1, timeout))
|
time.sleep(min(1, timeout))
|
||||||
|
|
||||||
@@ -85,6 +76,7 @@ class ActionModule(ActionBase):
|
|||||||
task_async = self._task.async_val
|
task_async = self._task.async_val
|
||||||
check_mode = self._play_context.check_mode
|
check_mode = self._play_context.check_mode
|
||||||
max_timeout = self._connection._play_context.timeout
|
max_timeout = self._connection._play_context.timeout
|
||||||
|
module_name = self._task.action
|
||||||
module_args = self._task.args
|
module_args = self._task.args
|
||||||
|
|
||||||
if module_args.get('state', None) == 'restored':
|
if module_args.get('state', None) == 'restored':
|
||||||
@@ -115,7 +107,7 @@ class ActionModule(ActionBase):
|
|||||||
# longer on the controller); and set a backup file path.
|
# longer on the controller); and set a backup file path.
|
||||||
module_args['_timeout'] = task_async
|
module_args['_timeout'] = task_async
|
||||||
module_args['_back'] = '%s/iptables.state' % async_dir
|
module_args['_back'] = '%s/iptables.state' % async_dir
|
||||||
async_status_args = dict(mode='status')
|
async_status_args = dict(_async_dir=async_dir)
|
||||||
confirm_cmd = 'rm -f %s' % module_args['_back']
|
confirm_cmd = 'rm -f %s' % module_args['_back']
|
||||||
starter_cmd = 'touch %s.starter' % module_args['_back']
|
starter_cmd = 'touch %s.starter' % module_args['_back']
|
||||||
remaining_time = max(task_async, max_timeout)
|
remaining_time = max(task_async, max_timeout)
|
||||||
@@ -141,7 +133,7 @@ class ActionModule(ActionBase):
|
|||||||
# The module is aware to not process the main iptables-restore
|
# The module is aware to not process the main iptables-restore
|
||||||
# command before finding (and deleting) the 'starter' cookie on
|
# command before finding (and deleting) the 'starter' cookie on
|
||||||
# the host, so the previous query will not reach ssh timeout.
|
# the host, so the previous query will not reach ssh timeout.
|
||||||
dummy = self._low_level_execute_command(starter_cmd, sudoable=self.DEFAULT_SUDOABLE)
|
garbage = self._low_level_execute_command(starter_cmd, sudoable=self.DEFAULT_SUDOABLE)
|
||||||
|
|
||||||
# As the main command is not yet executed on the target, here
|
# As the main command is not yet executed on the target, here
|
||||||
# 'finished' means 'failed before main command be executed'.
|
# 'finished' means 'failed before main command be executed'.
|
||||||
@@ -151,7 +143,7 @@ class ActionModule(ActionBase):
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
for dummy in range(max_timeout):
|
for x in range(max_timeout):
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
remaining_time -= 1
|
remaining_time -= 1
|
||||||
# - AnsibleConnectionFailure covers rejected requests (i.e.
|
# - AnsibleConnectionFailure covers rejected requests (i.e.
|
||||||
@@ -159,7 +151,7 @@ class ActionModule(ActionBase):
|
|||||||
# - ansible_timeout is able to cover dropped requests (due
|
# - ansible_timeout is able to cover dropped requests (due
|
||||||
# to a rule or policy DROP) if not lower than async_val.
|
# to a rule or policy DROP) if not lower than async_val.
|
||||||
try:
|
try:
|
||||||
dummy = self._low_level_execute_command(confirm_cmd, sudoable=self.DEFAULT_SUDOABLE)
|
garbage = self._low_level_execute_command(confirm_cmd, sudoable=self.DEFAULT_SUDOABLE)
|
||||||
break
|
break
|
||||||
except AnsibleConnectionFailure:
|
except AnsibleConnectionFailure:
|
||||||
continue
|
continue
|
||||||
@@ -172,12 +164,16 @@ class ActionModule(ActionBase):
|
|||||||
del result[key]
|
del result[key]
|
||||||
|
|
||||||
if result.get('invocation', {}).get('module_args'):
|
if result.get('invocation', {}).get('module_args'):
|
||||||
for key in ('_back', '_timeout', '_async_dir', 'jid'):
|
if '_timeout' in result['invocation']['module_args']:
|
||||||
if result['invocation']['module_args'].get(key):
|
del result['invocation']['module_args']['_back']
|
||||||
del result['invocation']['module_args'][key]
|
del result['invocation']['module_args']['_timeout']
|
||||||
|
|
||||||
async_status_args['mode'] = 'cleanup'
|
async_status_args['mode'] = 'cleanup'
|
||||||
dummy = self._async_result(async_status_args, task_vars, 0)
|
garbage = self._execute_module(
|
||||||
|
module_name='ansible.builtin.async_status',
|
||||||
|
module_args=async_status_args,
|
||||||
|
task_vars=task_vars,
|
||||||
|
wrap_async=False)
|
||||||
|
|
||||||
if not wrap_async:
|
if not wrap_async:
|
||||||
# remove a temporary path we created
|
# remove a temporary path we created
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright: (c) 2020, Amin Vakil <info@aminvakil.com>
|
# Copyright: (c) 2020, Amin Vakil <info@aminvakil.com>
|
||||||
# Copyright: (c) 2016-2018, Matt Davis <mdavis@ansible.com>
|
# Copyright: (c) 2016-2018, Matt Davis <mdavis@ansible.com>
|
||||||
# Copyright: (c) 2018, Sam Doran <sdoran@redhat.com>
|
# Copyright: (c) 2018, Sam Doran <sdoran@redhat.com>
|
||||||
@@ -8,7 +7,7 @@ from __future__ import (absolute_import, division, print_function)
|
|||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleConnectionFailure
|
from ansible.errors import AnsibleError, AnsibleConnectionFailure
|
||||||
from ansible.module_utils.common.text.converters import to_native, to_text
|
from ansible.module_utils._text import to_native, to_text
|
||||||
from ansible.module_utils.common.collections import is_string
|
from ansible.module_utils.common.collections import is_string
|
||||||
from ansible.plugins.action import ActionBase
|
from ansible.plugins.action import ActionBase
|
||||||
from ansible.utils.display import Display
|
from ansible.utils.display import Display
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ DOCUMENTATION = '''
|
|||||||
short_description: Do As user
|
short_description: Do As user
|
||||||
description:
|
description:
|
||||||
- This become plugins allows your remote/login user to execute commands as another user via the doas utility.
|
- This become plugins allows your remote/login user to execute commands as another user via the doas utility.
|
||||||
author: Ansible Core Team
|
author: ansible (@core)
|
||||||
options:
|
options:
|
||||||
become_user:
|
become_user:
|
||||||
description: User you 'become' to execute the task
|
description: User you 'become' to execute the task
|
||||||
@@ -81,7 +81,7 @@ DOCUMENTATION = '''
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from ansible.module_utils.common.text.converters import to_bytes
|
from ansible.module_utils._text import to_bytes
|
||||||
from ansible.plugins.become import BecomeBase
|
from ansible.plugins.become import BecomeBase
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ DOCUMENTATION = '''
|
|||||||
short_description: Centrify's Direct Authorize
|
short_description: Centrify's Direct Authorize
|
||||||
description:
|
description:
|
||||||
- This become plugins allows your remote/login user to execute commands as another user via the dzdo utility.
|
- This become plugins allows your remote/login user to execute commands as another user via the dzdo utility.
|
||||||
author: Ansible Core Team
|
author: ansible (@core)
|
||||||
options:
|
options:
|
||||||
become_user:
|
become_user:
|
||||||
description: User you 'become' to execute the task
|
description: User you 'become' to execute the task
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ DOCUMENTATION = '''
|
|||||||
short_description: Kerberos substitute user
|
short_description: Kerberos substitute user
|
||||||
description:
|
description:
|
||||||
- This become plugins allows your remote/login user to execute commands as another user via the ksu utility.
|
- This become plugins allows your remote/login user to execute commands as another user via the ksu utility.
|
||||||
author: Ansible Core Team
|
author: ansible (@core)
|
||||||
options:
|
options:
|
||||||
become_user:
|
become_user:
|
||||||
description: User you 'become' to execute the task
|
description: User you 'become' to execute the task
|
||||||
@@ -82,7 +82,7 @@ DOCUMENTATION = '''
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from ansible.module_utils.common.text.converters import to_bytes
|
from ansible.module_utils._text import to_bytes
|
||||||
from ansible.plugins.become import BecomeBase
|
from ansible.plugins.become import BecomeBase
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ DOCUMENTATION = '''
|
|||||||
short_description: Systemd's machinectl privilege escalation
|
short_description: Systemd's machinectl privilege escalation
|
||||||
description:
|
description:
|
||||||
- This become plugins allows your remote/login user to execute commands as another user via the machinectl utility.
|
- This become plugins allows your remote/login user to execute commands as another user via the machinectl utility.
|
||||||
author: Ansible Core Team
|
author: ansible (@core)
|
||||||
options:
|
options:
|
||||||
become_user:
|
become_user:
|
||||||
description: User you 'become' to execute the task
|
description: User you 'become' to execute the task
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ DOCUMENTATION = '''
|
|||||||
short_description: PowerBroker run
|
short_description: PowerBroker run
|
||||||
description:
|
description:
|
||||||
- This become plugins allows your remote/login user to execute commands as another user via the pbrun utility.
|
- This become plugins allows your remote/login user to execute commands as another user via the pbrun utility.
|
||||||
author: Ansible Core Team
|
author: ansible (@core)
|
||||||
options:
|
options:
|
||||||
become_user:
|
become_user:
|
||||||
description: User you 'become' to execute the task
|
description: User you 'become' to execute the task
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ DOCUMENTATION = '''
|
|||||||
short_description: profile based execution
|
short_description: profile based execution
|
||||||
description:
|
description:
|
||||||
- This become plugins allows your remote/login user to execute commands as another user via the pfexec utility.
|
- This become plugins allows your remote/login user to execute commands as another user via the pfexec utility.
|
||||||
author: Ansible Core Team
|
author: ansible (@core)
|
||||||
options:
|
options:
|
||||||
become_user:
|
become_user:
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ DOCUMENTATION = '''
|
|||||||
short_description: Privilege Manager run
|
short_description: Privilege Manager run
|
||||||
description:
|
description:
|
||||||
- This become plugins allows your remote/login user to execute commands as another user via the pmrun utility.
|
- This become plugins allows your remote/login user to execute commands as another user via the pmrun utility.
|
||||||
author: Ansible Core Team
|
author: ansible (@core)
|
||||||
options:
|
options:
|
||||||
become_exe:
|
become_exe:
|
||||||
description: Sudo executable
|
description: Sudo executable
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
|
|||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
DOCUMENTATION = """
|
DOCUMENTATION = """
|
||||||
name: sudosu
|
become: sudosu
|
||||||
short_description: Run tasks using sudo su -
|
short_description: Run tasks using sudo su -
|
||||||
description:
|
description:
|
||||||
- This become plugins allows your remote/login user to execute commands as another user via the C(sudo) and C(su) utilities combined.
|
- This become plugins allows your remote/login user to execute commands as another user via the C(sudo) and C(su) utilities combined.
|
||||||
|
|||||||
9
plugins/cache/memcached.py
vendored
9
plugins/cache/memcached.py
vendored
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2014, Brian Coca, Josh Drake, et al
|
# (c) 2014, Brian Coca, Josh Drake, et al
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -154,12 +153,12 @@ class CacheModuleKeys(MutableSet):
|
|||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self._keyset)
|
return len(self._keyset)
|
||||||
|
|
||||||
def add(self, value):
|
def add(self, key):
|
||||||
self._keyset[value] = time.time()
|
self._keyset[key] = time.time()
|
||||||
self._cache.set(self.PREFIX, self._keyset)
|
self._cache.set(self.PREFIX, self._keyset)
|
||||||
|
|
||||||
def discard(self, value):
|
def discard(self, key):
|
||||||
del self._keyset[value]
|
del self._keyset[key]
|
||||||
self._cache.set(self.PREFIX, self._keyset)
|
self._cache.set(self.PREFIX, self._keyset)
|
||||||
|
|
||||||
def remove_by_timerange(self, s_min, s_max):
|
def remove_by_timerange(self, s_min, s_max):
|
||||||
|
|||||||
1
plugins/cache/pickle.py
vendored
1
plugins/cache/pickle.py
vendored
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2017, Brian Coca
|
# (c) 2017, Brian Coca
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
17
plugins/cache/redis.py
vendored
17
plugins/cache/redis.py
vendored
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2014, Brian Coca, Josh Drake, et al
|
# (c) 2014, Brian Coca, Josh Drake, et al
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -62,13 +61,12 @@ DOCUMENTATION = '''
|
|||||||
type: integer
|
type: integer
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import re
|
|
||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from ansible import constants as C
|
from ansible import constants as C
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.module_utils.common.text.converters import to_native
|
from ansible.module_utils._text import to_native
|
||||||
from ansible.parsing.ajson import AnsibleJSONEncoder, AnsibleJSONDecoder
|
from ansible.parsing.ajson import AnsibleJSONEncoder, AnsibleJSONDecoder
|
||||||
from ansible.plugins.cache import BaseCacheModule
|
from ansible.plugins.cache import BaseCacheModule
|
||||||
from ansible.release import __version__ as ansible_base_version
|
from ansible.release import __version__ as ansible_base_version
|
||||||
@@ -93,8 +91,6 @@ class CacheModule(BaseCacheModule):
|
|||||||
performance.
|
performance.
|
||||||
"""
|
"""
|
||||||
_sentinel_service_name = None
|
_sentinel_service_name = None
|
||||||
re_url_conn = re.compile(r'^([^:]+|\[[^]]+\]):(\d+):(\d+)(?::(.*))?$')
|
|
||||||
re_sent_conn = re.compile(r'^(.*):(\d+)$')
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
uri = ''
|
uri = ''
|
||||||
@@ -134,18 +130,11 @@ class CacheModule(BaseCacheModule):
|
|||||||
self._db = self._get_sentinel_connection(uri, kw)
|
self._db = self._get_sentinel_connection(uri, kw)
|
||||||
# normal connection
|
# normal connection
|
||||||
else:
|
else:
|
||||||
connection = self._parse_connection(self.re_url_conn, uri)
|
connection = uri.split(':')
|
||||||
self._db = StrictRedis(*connection, **kw)
|
self._db = StrictRedis(*connection, **kw)
|
||||||
|
|
||||||
display.vv('Redis connection: %s' % self._db)
|
display.vv('Redis connection: %s' % self._db)
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _parse_connection(re_patt, uri):
|
|
||||||
match = re_patt.match(uri)
|
|
||||||
if not match:
|
|
||||||
raise AnsibleError("Unable to parse connection string")
|
|
||||||
return match.groups()
|
|
||||||
|
|
||||||
def _get_sentinel_connection(self, uri, kw):
|
def _get_sentinel_connection(self, uri, kw):
|
||||||
"""
|
"""
|
||||||
get sentinel connection details from _uri
|
get sentinel connection details from _uri
|
||||||
@@ -169,7 +158,7 @@ class CacheModule(BaseCacheModule):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
pass # password is optional
|
pass # password is optional
|
||||||
|
|
||||||
sentinels = [self._parse_connection(self.re_sent_conn, shost) for shost in connections]
|
sentinels = [tuple(shost.split(':')) for shost in connections]
|
||||||
display.vv('\nUsing redis sentinels: %s' % sentinels)
|
display.vv('\nUsing redis sentinels: %s' % sentinels)
|
||||||
scon = Sentinel(sentinels, **kw)
|
scon = Sentinel(sentinels, **kw)
|
||||||
try:
|
try:
|
||||||
|
|||||||
1
plugins/cache/yaml.py
vendored
1
plugins/cache/yaml.py
vendored
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2017, Brian Coca
|
# (c) 2017, Brian Coca
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (C) 2012, Michael DeHaan, <michael.dehaan@gmail.com>
|
# (C) 2012, Michael DeHaan, <michael.dehaan@gmail.com>
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2018, Ivan Aragones Muniesa <ivan.aragones.muniesa@gmail.com>
|
# (c) 2018, Ivan Aragones Muniesa <ivan.aragones.muniesa@gmail.com>
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
'''
|
'''
|
||||||
@@ -45,8 +44,6 @@ class CallbackModule(CallbackBase):
|
|||||||
_task_total = 0
|
_task_total = 0
|
||||||
_host_counter = 1
|
_host_counter = 1
|
||||||
_host_total = 0
|
_host_total = 0
|
||||||
_current_batch_total = 0
|
|
||||||
_previous_batch_total = 0
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(CallbackModule, self).__init__()
|
super(CallbackModule, self).__init__()
|
||||||
@@ -78,11 +75,8 @@ class CallbackModule(CallbackBase):
|
|||||||
self._display.banner(msg)
|
self._display.banner(msg)
|
||||||
self._play = play
|
self._play = play
|
||||||
|
|
||||||
self._previous_batch_total = self._current_batch_total
|
|
||||||
self._current_batch_total = self._previous_batch_total + len(self._all_vars()['vars']['ansible_play_batch'])
|
|
||||||
self._host_total = len(self._all_vars()['vars']['ansible_play_hosts_all'])
|
self._host_total = len(self._all_vars()['vars']['ansible_play_hosts_all'])
|
||||||
self._task_total = len(self._play.get_tasks()[0])
|
self._task_total = len(self._play.get_tasks()[0])
|
||||||
self._task_counter = 1
|
|
||||||
|
|
||||||
def v2_playbook_on_stats(self, stats):
|
def v2_playbook_on_stats(self, stats):
|
||||||
self._display.banner("PLAY RECAP")
|
self._display.banner("PLAY RECAP")
|
||||||
@@ -150,7 +144,7 @@ class CallbackModule(CallbackBase):
|
|||||||
path = task.get_path()
|
path = task.get_path()
|
||||||
if path:
|
if path:
|
||||||
self._display.display("task path: %s" % path, color=C.COLOR_DEBUG)
|
self._display.display("task path: %s" % path, color=C.COLOR_DEBUG)
|
||||||
self._host_counter = self._previous_batch_total
|
self._host_counter = 0
|
||||||
self._task_counter += 1
|
self._task_counter += 1
|
||||||
|
|
||||||
def v2_runner_on_ok(self, result):
|
def v2_runner_on_ok(self, result):
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2016, Dag Wieers <dag@wieers.com>
|
# (c) 2016, Dag Wieers <dag@wieers.com>
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
@@ -792,7 +792,7 @@ from ansible.utils.color import colorize, hostcolor
|
|||||||
from ansible.template import Templar
|
from ansible.template import Templar
|
||||||
from ansible.vars.manager import VariableManager
|
from ansible.vars.manager import VariableManager
|
||||||
from ansible.plugins.callback.default import CallbackModule as Default
|
from ansible.plugins.callback.default import CallbackModule as Default
|
||||||
from ansible.module_utils.common.text.converters import to_text
|
from ansible.module_utils._text import to_text
|
||||||
|
|
||||||
|
|
||||||
class DummyStdout(object):
|
class DummyStdout(object):
|
||||||
|
|||||||
@@ -1,423 +0,0 @@
|
|||||||
# (C) 2021, Victor Martinez <VictorMartinezRubio@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 = '''
|
|
||||||
author: Victor Martinez (@v1v) <VictorMartinezRubio@gmail.com>
|
|
||||||
name: elastic
|
|
||||||
type: notification
|
|
||||||
short_description: Create distributed traces for each Ansible task in Elastic APM
|
|
||||||
version_added: 3.8.0
|
|
||||||
description:
|
|
||||||
- This callback creates distributed traces for each Ansible task in Elastic APM.
|
|
||||||
- You can configure the plugin with environment variables.
|
|
||||||
- See U(https://www.elastic.co/guide/en/apm/agent/python/current/configuration.html).
|
|
||||||
options:
|
|
||||||
hide_task_arguments:
|
|
||||||
default: false
|
|
||||||
type: bool
|
|
||||||
description:
|
|
||||||
- Hide the arguments for a task.
|
|
||||||
env:
|
|
||||||
- name: ANSIBLE_OPENTELEMETRY_HIDE_TASK_ARGUMENTS
|
|
||||||
apm_service_name:
|
|
||||||
default: ansible
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- The service name resource attribute.
|
|
||||||
env:
|
|
||||||
- name: ELASTIC_APM_SERVICE_NAME
|
|
||||||
apm_server_url:
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- Use the APM server and its environment variables.
|
|
||||||
env:
|
|
||||||
- name: ELASTIC_APM_SERVER_URL
|
|
||||||
apm_secret_token:
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- Use the APM server token
|
|
||||||
env:
|
|
||||||
- name: ELASTIC_APM_SECRET_TOKEN
|
|
||||||
apm_api_key:
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- Use the APM API key
|
|
||||||
env:
|
|
||||||
- name: ELASTIC_APM_API_KEY
|
|
||||||
apm_verify_server_cert:
|
|
||||||
default: true
|
|
||||||
type: bool
|
|
||||||
description:
|
|
||||||
- Verifies the SSL certificate if an HTTPS connection.
|
|
||||||
env:
|
|
||||||
- name: ELASTIC_APM_VERIFY_SERVER_CERT
|
|
||||||
traceparent:
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- The L(W3C Trace Context header traceparent,https://www.w3.org/TR/trace-context-1/#traceparent-header).
|
|
||||||
env:
|
|
||||||
- name: TRACEPARENT
|
|
||||||
requirements:
|
|
||||||
- elastic-apm (Python library)
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
examples: |
|
|
||||||
Enable the plugin in ansible.cfg:
|
|
||||||
[defaults]
|
|
||||||
callbacks_enabled = community.general.elastic
|
|
||||||
|
|
||||||
Set the environment variable:
|
|
||||||
export ELASTIC_APM_SERVER_URL=<your APM server URL)>
|
|
||||||
export ELASTIC_APM_SERVICE_NAME=your_service_name
|
|
||||||
export ELASTIC_APM_API_KEY=your_APM_API_KEY
|
|
||||||
'''
|
|
||||||
|
|
||||||
import getpass
|
|
||||||
import socket
|
|
||||||
import time
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
from collections import OrderedDict
|
|
||||||
from os.path import basename
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleRuntimeError
|
|
||||||
from ansible.module_utils.six import raise_from
|
|
||||||
from ansible.plugins.callback import CallbackBase
|
|
||||||
|
|
||||||
try:
|
|
||||||
from elasticapm import Client, capture_span, trace_parent_from_string, instrument, label
|
|
||||||
except ImportError as imp_exc:
|
|
||||||
ELASTIC_LIBRARY_IMPORT_ERROR = imp_exc
|
|
||||||
else:
|
|
||||||
ELASTIC_LIBRARY_IMPORT_ERROR = None
|
|
||||||
|
|
||||||
|
|
||||||
class TaskData:
|
|
||||||
"""
|
|
||||||
Data about an individual task.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, uuid, name, path, play, action, args):
|
|
||||||
self.uuid = uuid
|
|
||||||
self.name = name
|
|
||||||
self.path = path
|
|
||||||
self.play = play
|
|
||||||
self.host_data = OrderedDict()
|
|
||||||
self.start = time.time()
|
|
||||||
self.action = action
|
|
||||||
self.args = args
|
|
||||||
|
|
||||||
def add_host(self, host):
|
|
||||||
if host.uuid in self.host_data:
|
|
||||||
if host.status == 'included':
|
|
||||||
# concatenate task include output from multiple items
|
|
||||||
host.result = '%s\n%s' % (self.host_data[host.uuid].result, host.result)
|
|
||||||
else:
|
|
||||||
return
|
|
||||||
|
|
||||||
self.host_data[host.uuid] = host
|
|
||||||
|
|
||||||
|
|
||||||
class HostData:
|
|
||||||
"""
|
|
||||||
Data about an individual host.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, uuid, name, status, result):
|
|
||||||
self.uuid = uuid
|
|
||||||
self.name = name
|
|
||||||
self.status = status
|
|
||||||
self.result = result
|
|
||||||
self.finish = time.time()
|
|
||||||
|
|
||||||
|
|
||||||
class ElasticSource(object):
|
|
||||||
def __init__(self, display):
|
|
||||||
self.ansible_playbook = ""
|
|
||||||
self.ansible_version = None
|
|
||||||
self.session = str(uuid.uuid4())
|
|
||||||
self.host = socket.gethostname()
|
|
||||||
try:
|
|
||||||
self.ip_address = socket.gethostbyname(socket.gethostname())
|
|
||||||
except Exception as e:
|
|
||||||
self.ip_address = None
|
|
||||||
self.user = getpass.getuser()
|
|
||||||
|
|
||||||
self._display = display
|
|
||||||
|
|
||||||
def start_task(self, tasks_data, hide_task_arguments, play_name, task):
|
|
||||||
""" record the start of a task for one or more hosts """
|
|
||||||
|
|
||||||
uuid = task._uuid
|
|
||||||
|
|
||||||
if uuid in tasks_data:
|
|
||||||
return
|
|
||||||
|
|
||||||
name = task.get_name().strip()
|
|
||||||
path = task.get_path()
|
|
||||||
action = task.action
|
|
||||||
args = None
|
|
||||||
|
|
||||||
if not task.no_log and not hide_task_arguments:
|
|
||||||
args = ', '.join(('%s=%s' % a for a in task.args.items()))
|
|
||||||
|
|
||||||
tasks_data[uuid] = TaskData(uuid, name, path, play_name, action, args)
|
|
||||||
|
|
||||||
def finish_task(self, tasks_data, status, result):
|
|
||||||
""" record the results of a task for a single host """
|
|
||||||
|
|
||||||
task_uuid = result._task._uuid
|
|
||||||
|
|
||||||
if hasattr(result, '_host') and result._host is not None:
|
|
||||||
host_uuid = result._host._uuid
|
|
||||||
host_name = result._host.name
|
|
||||||
else:
|
|
||||||
host_uuid = 'include'
|
|
||||||
host_name = 'include'
|
|
||||||
|
|
||||||
task = tasks_data[task_uuid]
|
|
||||||
|
|
||||||
if self.ansible_version is None and result._task_fields['args'].get('_ansible_version'):
|
|
||||||
self.ansible_version = result._task_fields['args'].get('_ansible_version')
|
|
||||||
|
|
||||||
task.add_host(HostData(host_uuid, host_name, status, result))
|
|
||||||
|
|
||||||
def generate_distributed_traces(self, tasks_data, status, end_time, traceparent, apm_service_name,
|
|
||||||
apm_server_url, apm_verify_server_cert, apm_secret_token, apm_api_key):
|
|
||||||
""" generate distributed traces from the collected TaskData and HostData """
|
|
||||||
|
|
||||||
tasks = []
|
|
||||||
parent_start_time = None
|
|
||||||
for task_uuid, task in tasks_data.items():
|
|
||||||
if parent_start_time is None:
|
|
||||||
parent_start_time = task.start
|
|
||||||
tasks.append(task)
|
|
||||||
|
|
||||||
apm_cli = self.init_apm_client(apm_server_url, apm_service_name, apm_verify_server_cert, apm_secret_token, apm_api_key)
|
|
||||||
if apm_cli:
|
|
||||||
instrument() # Only call this once, as early as possible.
|
|
||||||
if traceparent:
|
|
||||||
parent = trace_parent_from_string(traceparent)
|
|
||||||
apm_cli.begin_transaction("Session", trace_parent=parent, start=parent_start_time)
|
|
||||||
else:
|
|
||||||
apm_cli.begin_transaction("Session", start=parent_start_time)
|
|
||||||
# Populate trace metadata attributes
|
|
||||||
if self.ansible_version is not None:
|
|
||||||
label(ansible_version=self.ansible_version)
|
|
||||||
label(ansible_session=self.session, ansible_host_name=self.host, ansible_host_user=self.user)
|
|
||||||
if self.ip_address is not None:
|
|
||||||
label(ansible_host_ip=self.ip_address)
|
|
||||||
|
|
||||||
for task_data in tasks:
|
|
||||||
for host_uuid, host_data in task_data.host_data.items():
|
|
||||||
self.create_span_data(apm_cli, task_data, host_data)
|
|
||||||
|
|
||||||
apm_cli.end_transaction(name=__name__, result=status, duration=end_time - parent_start_time)
|
|
||||||
|
|
||||||
def create_span_data(self, apm_cli, task_data, host_data):
|
|
||||||
""" create the span with the given TaskData and HostData """
|
|
||||||
|
|
||||||
name = '[%s] %s: %s' % (host_data.name, task_data.play, task_data.name)
|
|
||||||
|
|
||||||
message = "success"
|
|
||||||
status = "success"
|
|
||||||
enriched_error_message = None
|
|
||||||
if host_data.status == 'included':
|
|
||||||
rc = 0
|
|
||||||
else:
|
|
||||||
res = host_data.result._result
|
|
||||||
rc = res.get('rc', 0)
|
|
||||||
if host_data.status == 'failed':
|
|
||||||
message = self.get_error_message(res)
|
|
||||||
enriched_error_message = self.enrich_error_message(res)
|
|
||||||
status = "failure"
|
|
||||||
elif host_data.status == 'skipped':
|
|
||||||
if 'skip_reason' in res:
|
|
||||||
message = res['skip_reason']
|
|
||||||
else:
|
|
||||||
message = 'skipped'
|
|
||||||
status = "unknown"
|
|
||||||
|
|
||||||
with capture_span(task_data.name,
|
|
||||||
start=task_data.start,
|
|
||||||
span_type="ansible.task.run",
|
|
||||||
duration=host_data.finish - task_data.start,
|
|
||||||
labels={"ansible.task.args": task_data.args,
|
|
||||||
"ansible.task.message": message,
|
|
||||||
"ansible.task.module": task_data.action,
|
|
||||||
"ansible.task.name": name,
|
|
||||||
"ansible.task.result": rc,
|
|
||||||
"ansible.task.host.name": host_data.name,
|
|
||||||
"ansible.task.host.status": host_data.status}) as span:
|
|
||||||
span.outcome = status
|
|
||||||
if 'failure' in status:
|
|
||||||
exception = AnsibleRuntimeError(message="{0}: {1} failed with error message {2}".format(task_data.action, name, enriched_error_message))
|
|
||||||
apm_cli.capture_exception(exc_info=(type(exception), exception, exception.__traceback__), handled=True)
|
|
||||||
|
|
||||||
def init_apm_client(self, apm_server_url, apm_service_name, apm_verify_server_cert, apm_secret_token, apm_api_key):
|
|
||||||
if apm_server_url:
|
|
||||||
return Client(service_name=apm_service_name,
|
|
||||||
server_url=apm_server_url,
|
|
||||||
verify_server_cert=False,
|
|
||||||
secret_token=apm_secret_token,
|
|
||||||
api_key=apm_api_key,
|
|
||||||
use_elastic_traceparent_header=True,
|
|
||||||
debug=True)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_error_message(result):
|
|
||||||
if result.get('exception') is not None:
|
|
||||||
return ElasticSource._last_line(result['exception'])
|
|
||||||
return result.get('msg', 'failed')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _last_line(text):
|
|
||||||
lines = text.strip().split('\n')
|
|
||||||
return lines[-1]
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def enrich_error_message(result):
|
|
||||||
message = result.get('msg', 'failed')
|
|
||||||
exception = result.get('exception')
|
|
||||||
stderr = result.get('stderr')
|
|
||||||
return ('message: "{0}"\nexception: "{1}"\nstderr: "{2}"').format(message, exception, stderr)
|
|
||||||
|
|
||||||
|
|
||||||
class CallbackModule(CallbackBase):
|
|
||||||
"""
|
|
||||||
This callback creates distributed traces with Elastic APM.
|
|
||||||
"""
|
|
||||||
|
|
||||||
CALLBACK_VERSION = 2.0
|
|
||||||
CALLBACK_TYPE = 'notification'
|
|
||||||
CALLBACK_NAME = 'community.general.elastic'
|
|
||||||
CALLBACK_NEEDS_ENABLED = True
|
|
||||||
|
|
||||||
def __init__(self, display=None):
|
|
||||||
super(CallbackModule, self).__init__(display=display)
|
|
||||||
self.hide_task_arguments = None
|
|
||||||
self.apm_service_name = None
|
|
||||||
self.ansible_playbook = None
|
|
||||||
self.traceparent = False
|
|
||||||
self.play_name = None
|
|
||||||
self.tasks_data = None
|
|
||||||
self.errors = 0
|
|
||||||
self.disabled = False
|
|
||||||
|
|
||||||
if ELASTIC_LIBRARY_IMPORT_ERROR:
|
|
||||||
raise_from(
|
|
||||||
AnsibleError('The `elastic-apm` must be installed to use this plugin'),
|
|
||||||
ELASTIC_LIBRARY_IMPORT_ERROR)
|
|
||||||
|
|
||||||
self.tasks_data = OrderedDict()
|
|
||||||
|
|
||||||
self.elastic = ElasticSource(display=self._display)
|
|
||||||
|
|
||||||
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.hide_task_arguments = self.get_option('hide_task_arguments')
|
|
||||||
|
|
||||||
self.apm_service_name = self.get_option('apm_service_name')
|
|
||||||
if not self.apm_service_name:
|
|
||||||
self.apm_service_name = 'ansible'
|
|
||||||
|
|
||||||
self.apm_server_url = self.get_option('apm_server_url')
|
|
||||||
self.apm_secret_token = self.get_option('apm_secret_token')
|
|
||||||
self.apm_api_key = self.get_option('apm_api_key')
|
|
||||||
self.apm_verify_server_cert = self.get_option('apm_verify_server_cert')
|
|
||||||
self.traceparent = self.get_option('traceparent')
|
|
||||||
|
|
||||||
def v2_playbook_on_start(self, playbook):
|
|
||||||
self.ansible_playbook = basename(playbook._file_name)
|
|
||||||
|
|
||||||
def v2_playbook_on_play_start(self, play):
|
|
||||||
self.play_name = play.get_name()
|
|
||||||
|
|
||||||
def v2_runner_on_no_hosts(self, task):
|
|
||||||
self.elastic.start_task(
|
|
||||||
self.tasks_data,
|
|
||||||
self.hide_task_arguments,
|
|
||||||
self.play_name,
|
|
||||||
task
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_task_start(self, task, is_conditional):
|
|
||||||
self.elastic.start_task(
|
|
||||||
self.tasks_data,
|
|
||||||
self.hide_task_arguments,
|
|
||||||
self.play_name,
|
|
||||||
task
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_cleanup_task_start(self, task):
|
|
||||||
self.elastic.start_task(
|
|
||||||
self.tasks_data,
|
|
||||||
self.hide_task_arguments,
|
|
||||||
self.play_name,
|
|
||||||
task
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_handler_task_start(self, task):
|
|
||||||
self.elastic.start_task(
|
|
||||||
self.tasks_data,
|
|
||||||
self.hide_task_arguments,
|
|
||||||
self.play_name,
|
|
||||||
task
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_runner_on_failed(self, result, ignore_errors=False):
|
|
||||||
self.errors += 1
|
|
||||||
self.elastic.finish_task(
|
|
||||||
self.tasks_data,
|
|
||||||
'failed',
|
|
||||||
result
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_runner_on_ok(self, result):
|
|
||||||
self.elastic.finish_task(
|
|
||||||
self.tasks_data,
|
|
||||||
'ok',
|
|
||||||
result
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_runner_on_skipped(self, result):
|
|
||||||
self.elastic.finish_task(
|
|
||||||
self.tasks_data,
|
|
||||||
'skipped',
|
|
||||||
result
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_include(self, included_file):
|
|
||||||
self.elastic.finish_task(
|
|
||||||
self.tasks_data,
|
|
||||||
'included',
|
|
||||||
included_file
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_stats(self, stats):
|
|
||||||
if self.errors == 0:
|
|
||||||
status = "success"
|
|
||||||
else:
|
|
||||||
status = "failure"
|
|
||||||
self.elastic.generate_distributed_traces(
|
|
||||||
self.tasks_data,
|
|
||||||
status,
|
|
||||||
time.time(),
|
|
||||||
self.traceparent,
|
|
||||||
self.apm_service_name,
|
|
||||||
self.apm_server_url,
|
|
||||||
self.apm_verify_server_cert,
|
|
||||||
self.apm_secret_token,
|
|
||||||
self.apm_api_key
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_runner_on_async_failed(self, result, **kwargs):
|
|
||||||
self.errors += 1
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (C) 2014, Matt Martz <matt@sivel.net>
|
# (C) 2014, Matt Martz <matt@sivel.net>
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (C) 2016 maxn nikolaev.makc@gmail.com
|
# Copyright (C) 2016 maxn nikolaev.makc@gmail.com
|
||||||
# Copyright (c) 2017 Ansible Project
|
# Copyright (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (C) 2012, Michael DeHaan, <michael.dehaan@gmail.com>
|
# (C) 2012, Michael DeHaan, <michael.dehaan@gmail.com>
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -32,7 +31,7 @@ import time
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from ansible.utils.path import makedirs_safe
|
from ansible.utils.path import makedirs_safe
|
||||||
from ansible.module_utils.common.text.converters import to_bytes
|
from ansible.module_utils._text import to_bytes
|
||||||
from ansible.module_utils.common._collections_compat import MutableMapping
|
from ansible.module_utils.common._collections_compat import MutableMapping
|
||||||
from ansible.parsing.ajson import AnsibleJSONEncoder
|
from ansible.parsing.ajson import AnsibleJSONEncoder
|
||||||
from ansible.plugins.callback import CallbackBase
|
from ansible.plugins.callback import CallbackBase
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# 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)
|
from __future__ import (absolute_import, division, print_function)
|
||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
DOCUMENTATION = '''
|
||||||
name: loganalytics
|
callback: loganalytics
|
||||||
type: aggregate
|
type: aggregate
|
||||||
short_description: Posts task results to Azure Log Analytics
|
short_description: Posts task results to Azure Log Analytics
|
||||||
author: "Cyrus Li (@zhcli) <cyrus1006@gmail.com>"
|
author: "Cyrus Li (@zhcli) <cyrus1006@gmail.com>"
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2018, Samir Musali <samir.musali@logdna.com>
|
# (c) 2018, Samir Musali <samir.musali@logdna.com>
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
@@ -78,7 +77,7 @@ def get_mac():
|
|||||||
|
|
||||||
# Getting hostname of system:
|
# Getting hostname of system:
|
||||||
def get_hostname():
|
def get_hostname():
|
||||||
return str(socket.gethostname()).split('.local', 1)[0]
|
return str(socket.gethostname()).split('.local')[0]
|
||||||
|
|
||||||
|
|
||||||
# Getting IP of system:
|
# Getting IP of system:
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2015, Logentries.com, Jimmy Tang <jimmy.tang@logentries.com>
|
# (c) 2015, Logentries.com, Jimmy Tang <jimmy.tang@logentries.com>
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -112,7 +111,7 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
HAS_FLATDICT = False
|
HAS_FLATDICT = False
|
||||||
|
|
||||||
from ansible.module_utils.common.text.converters import to_bytes, to_text
|
from ansible.module_utils._text import to_bytes, to_text
|
||||||
from ansible.plugins.callback import CallbackBase
|
from ansible.plugins.callback import CallbackBase
|
||||||
|
|
||||||
# Todo:
|
# Todo:
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (C) 2020, Yevhen Khmelenko <ujenmr@gmail.com>
|
# (C) 2020, Yevhen Khmelenko <ujenmr@gmail.com>
|
||||||
# (C) 2017 Ansible Project
|
# (C) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -94,7 +93,6 @@ ansible.cfg: |
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
from ansible import context
|
|
||||||
import socket
|
import socket
|
||||||
import uuid
|
import uuid
|
||||||
import logging
|
import logging
|
||||||
@@ -153,11 +151,11 @@ class CallbackModule(CallbackBase):
|
|||||||
self.base_data['ansible_pre_command_output'] = os.popen(
|
self.base_data['ansible_pre_command_output'] = os.popen(
|
||||||
self.ls_pre_command).read()
|
self.ls_pre_command).read()
|
||||||
|
|
||||||
if context.CLIARGS is not None:
|
if self._options is not None:
|
||||||
self.base_data['ansible_checkmode'] = context.CLIARGS.get('check')
|
self.base_data['ansible_checkmode'] = self._options.check
|
||||||
self.base_data['ansible_tags'] = context.CLIARGS.get('tags')
|
self.base_data['ansible_tags'] = self._options.tags
|
||||||
self.base_data['ansible_skip_tags'] = context.CLIARGS.get('skip_tags')
|
self.base_data['ansible_skip_tags'] = self._options.skip_tags
|
||||||
self.base_data['inventory'] = context.CLIARGS.get('inventory')
|
self.base_data['inventory'] = self._options.inventory
|
||||||
|
|
||||||
def set_options(self, task_keys=None, var_options=None, direct=None):
|
def set_options(self, task_keys=None, var_options=None, direct=None):
|
||||||
super(CallbackModule, self).set_options(task_keys=task_keys, var_options=var_options, direct=direct)
|
super(CallbackModule, self).set_options(task_keys=task_keys, var_options=var_options, direct=direct)
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ import re
|
|||||||
import smtplib
|
import smtplib
|
||||||
|
|
||||||
from ansible.module_utils.six import string_types
|
from ansible.module_utils.six import string_types
|
||||||
from ansible.module_utils.common.text.converters import to_bytes
|
from ansible.module_utils._text import to_bytes
|
||||||
from ansible.parsing.ajson import AnsibleJSONEncoder
|
from ansible.parsing.ajson import AnsibleJSONEncoder
|
||||||
from ansible.plugins.callback import CallbackBase
|
from ansible.plugins.callback import CallbackBase
|
||||||
|
|
||||||
|
|||||||
@@ -10,23 +10,22 @@ DOCUMENTATION = '''
|
|||||||
name: nrdp
|
name: nrdp
|
||||||
type: notification
|
type: notification
|
||||||
author: "Remi VERCHERE (@rverchere)"
|
author: "Remi VERCHERE (@rverchere)"
|
||||||
short_description: Post task results to a Nagios server through nrdp
|
short_description: post task result to a nagios server through nrdp
|
||||||
description:
|
description:
|
||||||
- This callback send playbook result to Nagios.
|
- this callback send playbook result to nagios
|
||||||
- Nagios shall use NRDP to recive passive events.
|
- nagios shall use NRDP to recive passive events
|
||||||
- The passive check is sent to a dedicated host/service for Ansible.
|
- the passive check is sent to a dedicated host/service for ansible
|
||||||
options:
|
options:
|
||||||
url:
|
url:
|
||||||
description: URL of the nrdp server.
|
description: url of the nrdp server
|
||||||
required: true
|
required: True
|
||||||
env:
|
env:
|
||||||
- name : NRDP_URL
|
- name : NRDP_URL
|
||||||
ini:
|
ini:
|
||||||
- section: callback_nrdp
|
- section: callback_nrdp
|
||||||
key: url
|
key: url
|
||||||
type: string
|
|
||||||
validate_certs:
|
validate_certs:
|
||||||
description: Validate the SSL certificate of the nrdp server. (Used for HTTPS URLs.)
|
description: (bool) validate the SSL certificate of the nrdp server. (For HTTPS url)
|
||||||
env:
|
env:
|
||||||
- name: NRDP_VALIDATE_CERTS
|
- name: NRDP_VALIDATE_CERTS
|
||||||
ini:
|
ini:
|
||||||
@@ -34,36 +33,32 @@ DOCUMENTATION = '''
|
|||||||
key: validate_nrdp_certs
|
key: validate_nrdp_certs
|
||||||
- section: callback_nrdp
|
- section: callback_nrdp
|
||||||
key: validate_certs
|
key: validate_certs
|
||||||
type: boolean
|
default: False
|
||||||
default: false
|
|
||||||
aliases: [ validate_nrdp_certs ]
|
aliases: [ validate_nrdp_certs ]
|
||||||
token:
|
token:
|
||||||
description: Token to be allowed to push nrdp events.
|
description: token to be allowed to push nrdp events
|
||||||
required: true
|
required: True
|
||||||
env:
|
env:
|
||||||
- name: NRDP_TOKEN
|
- name: NRDP_TOKEN
|
||||||
ini:
|
ini:
|
||||||
- section: callback_nrdp
|
- section: callback_nrdp
|
||||||
key: token
|
key: token
|
||||||
type: string
|
|
||||||
hostname:
|
hostname:
|
||||||
description: Hostname where the passive check is linked to.
|
description: hostname where the passive check is linked to
|
||||||
required: true
|
required: True
|
||||||
env:
|
env:
|
||||||
- name : NRDP_HOSTNAME
|
- name : NRDP_HOSTNAME
|
||||||
ini:
|
ini:
|
||||||
- section: callback_nrdp
|
- section: callback_nrdp
|
||||||
key: hostname
|
key: hostname
|
||||||
type: string
|
|
||||||
servicename:
|
servicename:
|
||||||
description: Service where the passive check is linked to.
|
description: service where the passive check is linked to
|
||||||
required: true
|
required: True
|
||||||
env:
|
env:
|
||||||
- name : NRDP_SERVICENAME
|
- name : NRDP_SERVICENAME
|
||||||
ini:
|
ini:
|
||||||
- section: callback_nrdp
|
- section: callback_nrdp
|
||||||
key: servicename
|
key: servicename
|
||||||
type: string
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
@@ -1,507 +0,0 @@
|
|||||||
# (C) 2021, Victor Martinez <VictorMartinezRubio@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 = '''
|
|
||||||
author: Victor Martinez (@v1v) <VictorMartinezRubio@gmail.com>
|
|
||||||
name: opentelemetry
|
|
||||||
type: notification
|
|
||||||
short_description: Create distributed traces with OpenTelemetry
|
|
||||||
version_added: 3.7.0
|
|
||||||
description:
|
|
||||||
- This callback creates distributed traces for each Ansible task with OpenTelemetry.
|
|
||||||
- You can configure the OpenTelemetry exporter and SDK with environment variables.
|
|
||||||
- See U(https://opentelemetry-python.readthedocs.io/en/latest/exporter/otlp/otlp.html).
|
|
||||||
- See U(https://opentelemetry-python.readthedocs.io/en/latest/sdk/environment_variables.html#opentelemetry-sdk-environment-variables).
|
|
||||||
options:
|
|
||||||
hide_task_arguments:
|
|
||||||
default: false
|
|
||||||
type: bool
|
|
||||||
description:
|
|
||||||
- Hide the arguments for a task.
|
|
||||||
env:
|
|
||||||
- name: ANSIBLE_OPENTELEMETRY_HIDE_TASK_ARGUMENTS
|
|
||||||
enable_from_environment:
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- Whether to enable this callback only if the given environment variable exists and it is set to C(true).
|
|
||||||
- This is handy when you use Configuration as Code and want to send distributed traces
|
|
||||||
if running in the CI rather when running Ansible locally.
|
|
||||||
- For such, it evaluates the given I(enable_from_environment) value as environment variable
|
|
||||||
and if set to true this plugin will be enabled.
|
|
||||||
env:
|
|
||||||
- name: ANSIBLE_OPENTELEMETRY_ENABLE_FROM_ENVIRONMENT
|
|
||||||
version_added: 3.8.0
|
|
||||||
otel_service_name:
|
|
||||||
default: ansible
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- The service name resource attribute.
|
|
||||||
env:
|
|
||||||
- name: OTEL_SERVICE_NAME
|
|
||||||
traceparent:
|
|
||||||
default: None
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- The L(W3C Trace Context header traceparent,https://www.w3.org/TR/trace-context-1/#traceparent-header).
|
|
||||||
env:
|
|
||||||
- name: TRACEPARENT
|
|
||||||
requirements:
|
|
||||||
- opentelemetry-api (Python library)
|
|
||||||
- opentelemetry-exporter-otlp (Python library)
|
|
||||||
- opentelemetry-sdk (Python library)
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
examples: |
|
|
||||||
Enable the plugin in ansible.cfg:
|
|
||||||
[defaults]
|
|
||||||
callbacks_enabled = community.general.opentelemetry
|
|
||||||
|
|
||||||
Set the environment variable:
|
|
||||||
export OTEL_EXPORTER_OTLP_ENDPOINT=<your endpoint (OTLP/HTTP)>
|
|
||||||
export OTEL_EXPORTER_OTLP_HEADERS="authorization=Bearer your_otel_token"
|
|
||||||
export OTEL_SERVICE_NAME=your_service_name
|
|
||||||
'''
|
|
||||||
|
|
||||||
import getpass
|
|
||||||
import os
|
|
||||||
import socket
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
from collections import OrderedDict
|
|
||||||
from os.path import basename
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError
|
|
||||||
from ansible.module_utils.six import raise_from
|
|
||||||
from ansible.module_utils.six.moves.urllib.parse import urlparse
|
|
||||||
from ansible.plugins.callback import CallbackBase
|
|
||||||
|
|
||||||
try:
|
|
||||||
from opentelemetry import trace
|
|
||||||
from opentelemetry.trace import SpanKind
|
|
||||||
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
|
||||||
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
|
|
||||||
from opentelemetry.trace.status import Status, StatusCode
|
|
||||||
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
|
|
||||||
from opentelemetry.sdk.trace import TracerProvider
|
|
||||||
from opentelemetry.sdk.trace.export import (
|
|
||||||
BatchSpanProcessor
|
|
||||||
)
|
|
||||||
from opentelemetry.util._time import _time_ns
|
|
||||||
except ImportError as imp_exc:
|
|
||||||
OTEL_LIBRARY_IMPORT_ERROR = imp_exc
|
|
||||||
else:
|
|
||||||
OTEL_LIBRARY_IMPORT_ERROR = None
|
|
||||||
|
|
||||||
|
|
||||||
class TaskData:
|
|
||||||
"""
|
|
||||||
Data about an individual task.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, uuid, name, path, play, action, args):
|
|
||||||
self.uuid = uuid
|
|
||||||
self.name = name
|
|
||||||
self.path = path
|
|
||||||
self.play = play
|
|
||||||
self.host_data = OrderedDict()
|
|
||||||
if sys.version_info >= (3, 7):
|
|
||||||
self.start = time.time_ns()
|
|
||||||
else:
|
|
||||||
self.start = _time_ns()
|
|
||||||
self.action = action
|
|
||||||
self.args = args
|
|
||||||
|
|
||||||
def add_host(self, host):
|
|
||||||
if host.uuid in self.host_data:
|
|
||||||
if host.status == 'included':
|
|
||||||
# concatenate task include output from multiple items
|
|
||||||
host.result = '%s\n%s' % (self.host_data[host.uuid].result, host.result)
|
|
||||||
else:
|
|
||||||
return
|
|
||||||
|
|
||||||
self.host_data[host.uuid] = host
|
|
||||||
|
|
||||||
|
|
||||||
class HostData:
|
|
||||||
"""
|
|
||||||
Data about an individual host.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, uuid, name, status, result):
|
|
||||||
self.uuid = uuid
|
|
||||||
self.name = name
|
|
||||||
self.status = status
|
|
||||||
self.result = result
|
|
||||||
if sys.version_info >= (3, 7):
|
|
||||||
self.finish = time.time_ns()
|
|
||||||
else:
|
|
||||||
self.finish = _time_ns()
|
|
||||||
|
|
||||||
|
|
||||||
class OpenTelemetrySource(object):
|
|
||||||
def __init__(self, display):
|
|
||||||
self.ansible_playbook = ""
|
|
||||||
self.ansible_version = None
|
|
||||||
self.session = str(uuid.uuid4())
|
|
||||||
self.host = socket.gethostname()
|
|
||||||
try:
|
|
||||||
self.ip_address = socket.gethostbyname(socket.gethostname())
|
|
||||||
except Exception as e:
|
|
||||||
self.ip_address = None
|
|
||||||
self.user = getpass.getuser()
|
|
||||||
|
|
||||||
self._display = display
|
|
||||||
|
|
||||||
def traceparent_context(self, traceparent):
|
|
||||||
carrier = dict()
|
|
||||||
carrier['traceparent'] = traceparent
|
|
||||||
return TraceContextTextMapPropagator().extract(carrier=carrier)
|
|
||||||
|
|
||||||
def start_task(self, tasks_data, hide_task_arguments, play_name, task):
|
|
||||||
""" record the start of a task for one or more hosts """
|
|
||||||
|
|
||||||
uuid = task._uuid
|
|
||||||
|
|
||||||
if uuid in tasks_data:
|
|
||||||
return
|
|
||||||
|
|
||||||
name = task.get_name().strip()
|
|
||||||
path = task.get_path()
|
|
||||||
action = task.action
|
|
||||||
args = None
|
|
||||||
|
|
||||||
if not task.no_log and not hide_task_arguments:
|
|
||||||
args = task.args
|
|
||||||
|
|
||||||
tasks_data[uuid] = TaskData(uuid, name, path, play_name, action, args)
|
|
||||||
|
|
||||||
def finish_task(self, tasks_data, status, result):
|
|
||||||
""" record the results of a task for a single host """
|
|
||||||
|
|
||||||
task_uuid = result._task._uuid
|
|
||||||
|
|
||||||
if hasattr(result, '_host') and result._host is not None:
|
|
||||||
host_uuid = result._host._uuid
|
|
||||||
host_name = result._host.name
|
|
||||||
else:
|
|
||||||
host_uuid = 'include'
|
|
||||||
host_name = 'include'
|
|
||||||
|
|
||||||
task = tasks_data[task_uuid]
|
|
||||||
|
|
||||||
if self.ansible_version is None and result._task_fields['args'].get('_ansible_version'):
|
|
||||||
self.ansible_version = result._task_fields['args'].get('_ansible_version')
|
|
||||||
|
|
||||||
task.add_host(HostData(host_uuid, host_name, status, result))
|
|
||||||
|
|
||||||
def generate_distributed_traces(self, otel_service_name, ansible_playbook, tasks_data, status, traceparent):
|
|
||||||
""" generate distributed traces from the collected TaskData and HostData """
|
|
||||||
|
|
||||||
tasks = []
|
|
||||||
parent_start_time = None
|
|
||||||
for task_uuid, task in tasks_data.items():
|
|
||||||
if parent_start_time is None:
|
|
||||||
parent_start_time = task.start
|
|
||||||
tasks.append(task)
|
|
||||||
|
|
||||||
trace.set_tracer_provider(
|
|
||||||
TracerProvider(
|
|
||||||
resource=Resource.create({SERVICE_NAME: otel_service_name})
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
processor = BatchSpanProcessor(OTLPSpanExporter())
|
|
||||||
|
|
||||||
trace.get_tracer_provider().add_span_processor(processor)
|
|
||||||
|
|
||||||
tracer = trace.get_tracer(__name__)
|
|
||||||
|
|
||||||
with tracer.start_as_current_span(ansible_playbook, context=self.traceparent_context(traceparent),
|
|
||||||
start_time=parent_start_time, kind=SpanKind.SERVER) as parent:
|
|
||||||
parent.set_status(status)
|
|
||||||
# Populate trace metadata attributes
|
|
||||||
if self.ansible_version is not None:
|
|
||||||
parent.set_attribute("ansible.version", self.ansible_version)
|
|
||||||
parent.set_attribute("ansible.session", self.session)
|
|
||||||
parent.set_attribute("ansible.host.name", self.host)
|
|
||||||
if self.ip_address is not None:
|
|
||||||
parent.set_attribute("ansible.host.ip", self.ip_address)
|
|
||||||
parent.set_attribute("ansible.host.user", self.user)
|
|
||||||
for task in tasks:
|
|
||||||
for host_uuid, host_data in task.host_data.items():
|
|
||||||
with tracer.start_as_current_span(task.name, start_time=task.start, end_on_exit=False) as span:
|
|
||||||
self.update_span_data(task, host_data, span)
|
|
||||||
|
|
||||||
def update_span_data(self, task_data, host_data, span):
|
|
||||||
""" update the span with the given TaskData and HostData """
|
|
||||||
|
|
||||||
name = '[%s] %s: %s' % (host_data.name, task_data.play, task_data.name)
|
|
||||||
|
|
||||||
message = 'success'
|
|
||||||
res = {}
|
|
||||||
rc = 0
|
|
||||||
status = Status(status_code=StatusCode.OK)
|
|
||||||
if host_data.status != 'included':
|
|
||||||
# Support loops
|
|
||||||
if 'results' in host_data.result._result:
|
|
||||||
if host_data.status == 'failed':
|
|
||||||
message = self.get_error_message_from_results(host_data.result._result['results'], task_data.action)
|
|
||||||
enriched_error_message = self.enrich_error_message_from_results(host_data.result._result['results'], task_data.action)
|
|
||||||
else:
|
|
||||||
res = host_data.result._result
|
|
||||||
rc = res.get('rc', 0)
|
|
||||||
message = self.get_error_message(res)
|
|
||||||
enriched_error_message = self.enrich_error_message(res)
|
|
||||||
|
|
||||||
if host_data.status == 'failed':
|
|
||||||
status = Status(status_code=StatusCode.ERROR, description=message)
|
|
||||||
# Record an exception with the task message
|
|
||||||
span.record_exception(BaseException(enriched_error_message))
|
|
||||||
elif host_data.status == 'skipped':
|
|
||||||
message = res['skip_reason'] if 'skip_reason' in res else 'skipped'
|
|
||||||
status = Status(status_code=StatusCode.UNSET)
|
|
||||||
|
|
||||||
span.set_status(status)
|
|
||||||
if isinstance(task_data.args, dict) and "gather_facts" not in task_data.action:
|
|
||||||
names = tuple(self.transform_ansible_unicode_to_str(k) for k in task_data.args.keys())
|
|
||||||
values = tuple(self.transform_ansible_unicode_to_str(k) for k in task_data.args.values())
|
|
||||||
self.set_span_attribute(span, ("ansible.task.args.name"), names)
|
|
||||||
self.set_span_attribute(span, ("ansible.task.args.value"), values)
|
|
||||||
self.set_span_attribute(span, "ansible.task.module", task_data.action)
|
|
||||||
self.set_span_attribute(span, "ansible.task.message", message)
|
|
||||||
self.set_span_attribute(span, "ansible.task.name", name)
|
|
||||||
self.set_span_attribute(span, "ansible.task.result", rc)
|
|
||||||
self.set_span_attribute(span, "ansible.task.host.name", host_data.name)
|
|
||||||
self.set_span_attribute(span, "ansible.task.host.status", host_data.status)
|
|
||||||
# This will allow to enrich the service map
|
|
||||||
self.add_attributes_for_service_map_if_possible(span, task_data)
|
|
||||||
span.end(end_time=host_data.finish)
|
|
||||||
|
|
||||||
def set_span_attribute(self, span, attributeName, attributeValue):
|
|
||||||
""" update the span attribute with the given attribute and value if not None """
|
|
||||||
|
|
||||||
if span is None and self._display is not None:
|
|
||||||
self._display.warning('span object is None. Please double check if that is expected.')
|
|
||||||
else:
|
|
||||||
if attributeValue is not None:
|
|
||||||
span.set_attribute(attributeName, attributeValue)
|
|
||||||
|
|
||||||
def add_attributes_for_service_map_if_possible(self, span, task_data):
|
|
||||||
"""Update the span attributes with the service that the task interacted with, if possible."""
|
|
||||||
|
|
||||||
redacted_url = self.parse_and_redact_url_if_possible(task_data.args)
|
|
||||||
if redacted_url:
|
|
||||||
self.set_span_attribute(span, "http.url", redacted_url.geturl())
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def parse_and_redact_url_if_possible(args):
|
|
||||||
"""Parse and redact the url, if possible."""
|
|
||||||
|
|
||||||
try:
|
|
||||||
parsed_url = urlparse(OpenTelemetrySource.url_from_args(args))
|
|
||||||
except ValueError:
|
|
||||||
return None
|
|
||||||
|
|
||||||
if OpenTelemetrySource.is_valid_url(parsed_url):
|
|
||||||
return OpenTelemetrySource.redact_user_password(parsed_url)
|
|
||||||
return None
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def url_from_args(args):
|
|
||||||
# the order matters
|
|
||||||
url_args = ("url", "api_url", "baseurl", "repo", "server_url", "chart_repo_url")
|
|
||||||
for arg in url_args:
|
|
||||||
if args.get(arg):
|
|
||||||
return args.get(arg)
|
|
||||||
return ""
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def redact_user_password(url):
|
|
||||||
return url._replace(netloc=url.hostname) if url.password else url
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def is_valid_url(url):
|
|
||||||
if all([url.scheme, url.netloc, url.hostname]):
|
|
||||||
return "{{" not in url.hostname
|
|
||||||
return False
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def transform_ansible_unicode_to_str(value):
|
|
||||||
parsed_url = urlparse(str(value))
|
|
||||||
if OpenTelemetrySource.is_valid_url(parsed_url):
|
|
||||||
return OpenTelemetrySource.redact_user_password(parsed_url).geturl()
|
|
||||||
return str(value)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_error_message(result):
|
|
||||||
if result.get('exception') is not None:
|
|
||||||
return OpenTelemetrySource._last_line(result['exception'])
|
|
||||||
return result.get('msg', 'failed')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_error_message_from_results(results, action):
|
|
||||||
for result in results:
|
|
||||||
if result.get('failed', False):
|
|
||||||
return ('{0}({1}) - {2}').format(action, result.get('item', 'none'), OpenTelemetrySource.get_error_message(result))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _last_line(text):
|
|
||||||
lines = text.strip().split('\n')
|
|
||||||
return lines[-1]
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def enrich_error_message(result):
|
|
||||||
message = result.get('msg', 'failed')
|
|
||||||
exception = result.get('exception')
|
|
||||||
stderr = result.get('stderr')
|
|
||||||
return ('message: "{0}"\nexception: "{1}"\nstderr: "{2}"').format(message, exception, stderr)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def enrich_error_message_from_results(results, action):
|
|
||||||
message = ""
|
|
||||||
for result in results:
|
|
||||||
if result.get('failed', False):
|
|
||||||
message = ('{0}({1}) - {2}\n{3}').format(action, result.get('item', 'none'), OpenTelemetrySource.enrich_error_message(result), message)
|
|
||||||
return message
|
|
||||||
|
|
||||||
|
|
||||||
class CallbackModule(CallbackBase):
|
|
||||||
"""
|
|
||||||
This callback creates distributed traces.
|
|
||||||
"""
|
|
||||||
|
|
||||||
CALLBACK_VERSION = 2.0
|
|
||||||
CALLBACK_TYPE = 'notification'
|
|
||||||
CALLBACK_NAME = 'community.general.opentelemetry'
|
|
||||||
CALLBACK_NEEDS_ENABLED = True
|
|
||||||
|
|
||||||
def __init__(self, display=None):
|
|
||||||
super(CallbackModule, self).__init__(display=display)
|
|
||||||
self.hide_task_arguments = None
|
|
||||||
self.otel_service_name = None
|
|
||||||
self.ansible_playbook = None
|
|
||||||
self.play_name = None
|
|
||||||
self.tasks_data = None
|
|
||||||
self.errors = 0
|
|
||||||
self.disabled = False
|
|
||||||
self.traceparent = False
|
|
||||||
|
|
||||||
if OTEL_LIBRARY_IMPORT_ERROR:
|
|
||||||
raise_from(
|
|
||||||
AnsibleError('The `opentelemetry-api`, `opentelemetry-exporter-otlp` or `opentelemetry-sdk` must be installed to use this plugin'),
|
|
||||||
OTEL_LIBRARY_IMPORT_ERROR)
|
|
||||||
|
|
||||||
self.tasks_data = OrderedDict()
|
|
||||||
|
|
||||||
self.opentelemetry = OpenTelemetrySource(display=self._display)
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
environment_variable = self.get_option('enable_from_environment')
|
|
||||||
if environment_variable is not None and os.environ.get(environment_variable, 'false').lower() != 'true':
|
|
||||||
self.disabled = True
|
|
||||||
self._display.warning("The `enable_from_environment` option has been set and {0} is not enabled. "
|
|
||||||
"Disabling the `opentelemetry` callback plugin.".format(environment_variable))
|
|
||||||
|
|
||||||
self.hide_task_arguments = self.get_option('hide_task_arguments')
|
|
||||||
|
|
||||||
self.otel_service_name = self.get_option('otel_service_name')
|
|
||||||
|
|
||||||
if not self.otel_service_name:
|
|
||||||
self.otel_service_name = 'ansible'
|
|
||||||
|
|
||||||
# See https://github.com/open-telemetry/opentelemetry-specification/issues/740
|
|
||||||
self.traceparent = self.get_option('traceparent')
|
|
||||||
|
|
||||||
def v2_playbook_on_start(self, playbook):
|
|
||||||
self.ansible_playbook = basename(playbook._file_name)
|
|
||||||
|
|
||||||
def v2_playbook_on_play_start(self, play):
|
|
||||||
self.play_name = play.get_name()
|
|
||||||
|
|
||||||
def v2_runner_on_no_hosts(self, task):
|
|
||||||
self.opentelemetry.start_task(
|
|
||||||
self.tasks_data,
|
|
||||||
self.hide_task_arguments,
|
|
||||||
self.play_name,
|
|
||||||
task
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_task_start(self, task, is_conditional):
|
|
||||||
self.opentelemetry.start_task(
|
|
||||||
self.tasks_data,
|
|
||||||
self.hide_task_arguments,
|
|
||||||
self.play_name,
|
|
||||||
task
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_cleanup_task_start(self, task):
|
|
||||||
self.opentelemetry.start_task(
|
|
||||||
self.tasks_data,
|
|
||||||
self.hide_task_arguments,
|
|
||||||
self.play_name,
|
|
||||||
task
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_handler_task_start(self, task):
|
|
||||||
self.opentelemetry.start_task(
|
|
||||||
self.tasks_data,
|
|
||||||
self.hide_task_arguments,
|
|
||||||
self.play_name,
|
|
||||||
task
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_runner_on_failed(self, result, ignore_errors=False):
|
|
||||||
self.errors += 1
|
|
||||||
self.opentelemetry.finish_task(
|
|
||||||
self.tasks_data,
|
|
||||||
'failed',
|
|
||||||
result
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_runner_on_ok(self, result):
|
|
||||||
self.opentelemetry.finish_task(
|
|
||||||
self.tasks_data,
|
|
||||||
'ok',
|
|
||||||
result
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_runner_on_skipped(self, result):
|
|
||||||
self.opentelemetry.finish_task(
|
|
||||||
self.tasks_data,
|
|
||||||
'skipped',
|
|
||||||
result
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_include(self, included_file):
|
|
||||||
self.opentelemetry.finish_task(
|
|
||||||
self.tasks_data,
|
|
||||||
'included',
|
|
||||||
included_file
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_playbook_on_stats(self, stats):
|
|
||||||
if self.errors == 0:
|
|
||||||
status = Status(status_code=StatusCode.OK)
|
|
||||||
else:
|
|
||||||
status = Status(status_code=StatusCode.ERROR)
|
|
||||||
self.opentelemetry.generate_distributed_traces(
|
|
||||||
self.otel_service_name,
|
|
||||||
self.ansible_playbook,
|
|
||||||
self.tasks_data,
|
|
||||||
status,
|
|
||||||
self.traceparent
|
|
||||||
)
|
|
||||||
|
|
||||||
def v2_runner_on_async_failed(self, result, **kwargs):
|
|
||||||
self.errors += 1
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2012, Michael DeHaan, <michael.dehaan@gmail.com>
|
# (c) 2012, Michael DeHaan, <michael.dehaan@gmail.com>
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) Fastly, inc 2016
|
# (c) Fastly, inc 2016
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -41,7 +40,7 @@ import difflib
|
|||||||
|
|
||||||
from ansible import constants as C
|
from ansible import constants as C
|
||||||
from ansible.plugins.callback import CallbackBase
|
from ansible.plugins.callback import CallbackBase
|
||||||
from ansible.module_utils.common.text.converters import to_text
|
from ansible.module_utils._text import to_text
|
||||||
|
|
||||||
try:
|
try:
|
||||||
codeCodes = C.COLOR_CODES
|
codeCodes = C.COLOR_CODES
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (C) 2014-2015, Matt Martz <matt@sivel.net>
|
# (C) 2014-2015, Matt Martz <matt@sivel.net>
|
||||||
# (C) 2017 Ansible Project
|
# (C) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -59,7 +58,7 @@ import os
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from ansible import context
|
from ansible import context
|
||||||
from ansible.module_utils.common.text.converters import to_text
|
from ansible.module_utils._text import to_text
|
||||||
from ansible.module_utils.urls import open_url
|
from ansible.module_utils.urls import open_url
|
||||||
from ansible.plugins.callback import CallbackBase
|
from ansible.plugins.callback import CallbackBase
|
||||||
|
|
||||||
|
|||||||
@@ -68,16 +68,6 @@ DOCUMENTATION = '''
|
|||||||
type: bool
|
type: bool
|
||||||
default: false
|
default: false
|
||||||
version_added: 2.0.0
|
version_added: 2.0.0
|
||||||
batch:
|
|
||||||
description:
|
|
||||||
- Correlation ID which can be set across multiple playbook executions.
|
|
||||||
env:
|
|
||||||
- name: SPLUNK_BATCH
|
|
||||||
ini:
|
|
||||||
- section: callback_splunk
|
|
||||||
key: batch
|
|
||||||
type: str
|
|
||||||
version_added: 3.3.0
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
@@ -117,7 +107,7 @@ class SplunkHTTPCollectorSource(object):
|
|||||||
self.ip_address = socket.gethostbyname(socket.gethostname())
|
self.ip_address = socket.gethostbyname(socket.gethostname())
|
||||||
self.user = getpass.getuser()
|
self.user = getpass.getuser()
|
||||||
|
|
||||||
def send_event(self, url, authtoken, validate_certs, include_milliseconds, batch, state, result, runtime):
|
def send_event(self, url, authtoken, validate_certs, include_milliseconds, state, result, runtime):
|
||||||
if result._task_fields['args'].get('_ansible_check_mode') is True:
|
if result._task_fields['args'].get('_ansible_check_mode') is True:
|
||||||
self.ansible_check_mode = True
|
self.ansible_check_mode = True
|
||||||
|
|
||||||
@@ -136,8 +126,6 @@ class SplunkHTTPCollectorSource(object):
|
|||||||
data = {}
|
data = {}
|
||||||
data['uuid'] = result._task._uuid
|
data['uuid'] = result._task._uuid
|
||||||
data['session'] = self.session
|
data['session'] = self.session
|
||||||
if batch is not None:
|
|
||||||
data['batch'] = batch
|
|
||||||
data['status'] = state
|
data['status'] = state
|
||||||
|
|
||||||
if include_milliseconds:
|
if include_milliseconds:
|
||||||
@@ -187,7 +175,6 @@ class CallbackModule(CallbackBase):
|
|||||||
self.authtoken = None
|
self.authtoken = None
|
||||||
self.validate_certs = None
|
self.validate_certs = None
|
||||||
self.include_milliseconds = None
|
self.include_milliseconds = None
|
||||||
self.batch = None
|
|
||||||
self.splunk = SplunkHTTPCollectorSource()
|
self.splunk = SplunkHTTPCollectorSource()
|
||||||
|
|
||||||
def _runtime(self, result):
|
def _runtime(self, result):
|
||||||
@@ -225,8 +212,6 @@ class CallbackModule(CallbackBase):
|
|||||||
|
|
||||||
self.include_milliseconds = self.get_option('include_milliseconds')
|
self.include_milliseconds = self.get_option('include_milliseconds')
|
||||||
|
|
||||||
self.batch = self.get_option('batch')
|
|
||||||
|
|
||||||
def v2_playbook_on_start(self, playbook):
|
def v2_playbook_on_start(self, playbook):
|
||||||
self.splunk.ansible_playbook = basename(playbook._file_name)
|
self.splunk.ansible_playbook = basename(playbook._file_name)
|
||||||
|
|
||||||
@@ -242,7 +227,6 @@ class CallbackModule(CallbackBase):
|
|||||||
self.authtoken,
|
self.authtoken,
|
||||||
self.validate_certs,
|
self.validate_certs,
|
||||||
self.include_milliseconds,
|
self.include_milliseconds,
|
||||||
self.batch,
|
|
||||||
'OK',
|
'OK',
|
||||||
result,
|
result,
|
||||||
self._runtime(result)
|
self._runtime(result)
|
||||||
@@ -254,7 +238,6 @@ class CallbackModule(CallbackBase):
|
|||||||
self.authtoken,
|
self.authtoken,
|
||||||
self.validate_certs,
|
self.validate_certs,
|
||||||
self.include_milliseconds,
|
self.include_milliseconds,
|
||||||
self.batch,
|
|
||||||
'SKIPPED',
|
'SKIPPED',
|
||||||
result,
|
result,
|
||||||
self._runtime(result)
|
self._runtime(result)
|
||||||
@@ -266,7 +249,6 @@ class CallbackModule(CallbackBase):
|
|||||||
self.authtoken,
|
self.authtoken,
|
||||||
self.validate_certs,
|
self.validate_certs,
|
||||||
self.include_milliseconds,
|
self.include_milliseconds,
|
||||||
self.batch,
|
|
||||||
'FAILED',
|
'FAILED',
|
||||||
result,
|
result,
|
||||||
self._runtime(result)
|
self._runtime(result)
|
||||||
@@ -278,7 +260,6 @@ class CallbackModule(CallbackBase):
|
|||||||
self.authtoken,
|
self.authtoken,
|
||||||
self.validate_certs,
|
self.validate_certs,
|
||||||
self.include_milliseconds,
|
self.include_milliseconds,
|
||||||
self.batch,
|
|
||||||
'FAILED',
|
'FAILED',
|
||||||
result,
|
result,
|
||||||
self._runtime(result)
|
self._runtime(result)
|
||||||
@@ -290,7 +271,6 @@ class CallbackModule(CallbackBase):
|
|||||||
self.authtoken,
|
self.authtoken,
|
||||||
self.validate_certs,
|
self.validate_certs,
|
||||||
self.include_milliseconds,
|
self.include_milliseconds,
|
||||||
self.batch,
|
|
||||||
'UNREACHABLE',
|
'UNREACHABLE',
|
||||||
result,
|
result,
|
||||||
self._runtime(result)
|
self._runtime(result)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright: (c) 2017, Allyson Bowles <@akatch>
|
# Copyright: (c) 2017, Allyson Bowles <@akatch>
|
||||||
# Copyright: (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com>
|
# Copyright: (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com>
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -23,7 +22,7 @@ DOCUMENTATION = '''
|
|||||||
from os.path import basename
|
from os.path import basename
|
||||||
from ansible import constants as C
|
from ansible import constants as C
|
||||||
from ansible import context
|
from ansible import context
|
||||||
from ansible.module_utils.common.text.converters import to_text
|
from ansible.module_utils._text import to_text
|
||||||
from ansible.utils.color import colorize, hostcolor
|
from ansible.utils.color import colorize, hostcolor
|
||||||
from ansible.plugins.callback.default import CallbackModule as CallbackModule_default
|
from ansible.plugins.callback.default import CallbackModule as CallbackModule_default
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
@@ -26,7 +25,7 @@ import re
|
|||||||
import string
|
import string
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from ansible.module_utils.common.text.converters import to_bytes, to_text
|
from ansible.module_utils._text import to_bytes, to_text
|
||||||
from ansible.module_utils.six import string_types
|
from ansible.module_utils.six import string_types
|
||||||
from ansible.parsing.yaml.dumper import AnsibleDumper
|
from ansible.parsing.yaml.dumper import AnsibleDumper
|
||||||
from ansible.plugins.callback import CallbackBase, strip_internal_keys, module_response_deepcopy
|
from ansible.plugins.callback import CallbackBase, strip_internal_keys, module_response_deepcopy
|
||||||
@@ -42,29 +41,28 @@ def should_use_block(value):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
class MyDumper(AnsibleDumper):
|
def my_represent_scalar(self, tag, value, style=None):
|
||||||
def represent_scalar(self, tag, value, style=None):
|
"""Uses block style for multi-line strings"""
|
||||||
"""Uses block style for multi-line strings"""
|
if style is None:
|
||||||
if style is None:
|
if should_use_block(value):
|
||||||
if should_use_block(value):
|
style = '|'
|
||||||
style = '|'
|
# we care more about readable than accuracy, so...
|
||||||
# we care more about readable than accuracy, so...
|
# ...no trailing space
|
||||||
# ...no trailing space
|
value = value.rstrip()
|
||||||
value = value.rstrip()
|
# ...and non-printable characters
|
||||||
# ...and non-printable characters
|
value = ''.join(x for x in value if x in string.printable or ord(x) >= 0xA0)
|
||||||
value = ''.join(x for x in value if x in string.printable or ord(x) >= 0xA0)
|
# ...tabs prevent blocks from expanding
|
||||||
# ...tabs prevent blocks from expanding
|
value = value.expandtabs()
|
||||||
value = value.expandtabs()
|
# ...and odd bits of whitespace
|
||||||
# ...and odd bits of whitespace
|
value = re.sub(r'[\x0b\x0c\r]', '', value)
|
||||||
value = re.sub(r'[\x0b\x0c\r]', '', value)
|
# ...as does trailing space
|
||||||
# ...as does trailing space
|
value = re.sub(r' +\n', '\n', value)
|
||||||
value = re.sub(r' +\n', '\n', value)
|
else:
|
||||||
else:
|
style = self.default_style
|
||||||
style = self.default_style
|
node = yaml.representer.ScalarNode(tag, value, style=style)
|
||||||
node = yaml.representer.ScalarNode(tag, value, style=style)
|
if self.alias_key is not None:
|
||||||
if self.alias_key is not None:
|
self.represented_objects[self.alias_key] = node
|
||||||
self.represented_objects[self.alias_key] = node
|
return node
|
||||||
return node
|
|
||||||
|
|
||||||
|
|
||||||
class CallbackModule(Default):
|
class CallbackModule(Default):
|
||||||
@@ -80,6 +78,7 @@ class CallbackModule(Default):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(CallbackModule, self).__init__()
|
super(CallbackModule, self).__init__()
|
||||||
|
yaml.representer.BaseRepresenter.represent_scalar = my_represent_scalar
|
||||||
|
|
||||||
def _dump_results(self, result, indent=None, sort_keys=True, keep_invocation=False):
|
def _dump_results(self, result, indent=None, sort_keys=True, keep_invocation=False):
|
||||||
if result.get('_ansible_no_log', False):
|
if result.get('_ansible_no_log', False):
|
||||||
@@ -121,7 +120,7 @@ class CallbackModule(Default):
|
|||||||
|
|
||||||
if abridged_result:
|
if abridged_result:
|
||||||
dumped += '\n'
|
dumped += '\n'
|
||||||
dumped += to_text(yaml.dump(abridged_result, allow_unicode=True, width=1000, Dumper=MyDumper, default_flow_style=False))
|
dumped += to_text(yaml.dump(abridged_result, allow_unicode=True, width=1000, Dumper=AnsibleDumper, default_flow_style=False))
|
||||||
|
|
||||||
# indent by a couple of spaces
|
# indent by a couple of spaces
|
||||||
dumped = '\n '.join(dumped.split('\n')).rstrip()
|
dumped = '\n '.join(dumped.split('\n')).rstrip()
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Based on local.py (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
# Based on local.py (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
||||||
#
|
#
|
||||||
# (c) 2013, Maykel Moya <mmoya@speedyrails.com>
|
# (c) 2013, Maykel Moya <mmoya@speedyrails.com>
|
||||||
@@ -55,7 +54,7 @@ from ansible.errors import AnsibleError
|
|||||||
from ansible.module_utils.basic import is_executable
|
from ansible.module_utils.basic import is_executable
|
||||||
from ansible.module_utils.common.process import get_bin_path
|
from ansible.module_utils.common.process import get_bin_path
|
||||||
from ansible.module_utils.six.moves import shlex_quote
|
from ansible.module_utils.six.moves import shlex_quote
|
||||||
from ansible.module_utils.common.text.converters import to_bytes, to_native
|
from ansible.module_utils._text import to_bytes, to_native
|
||||||
from ansible.plugins.connection import ConnectionBase, BUFSIZE
|
from ansible.plugins.connection import ConnectionBase, BUFSIZE
|
||||||
from ansible.utils.display import Display
|
from ansible.utils.display import Display
|
||||||
|
|
||||||
@@ -63,7 +62,7 @@ display = Display()
|
|||||||
|
|
||||||
|
|
||||||
class Connection(ConnectionBase):
|
class Connection(ConnectionBase):
|
||||||
""" Local chroot based connections """
|
''' Local chroot based connections '''
|
||||||
|
|
||||||
transport = 'community.general.chroot'
|
transport = 'community.general.chroot'
|
||||||
has_pipelining = True
|
has_pipelining = True
|
||||||
@@ -96,7 +95,7 @@ class Connection(ConnectionBase):
|
|||||||
raise AnsibleError("%s does not look like a chrootable dir (/bin/sh missing)" % self.chroot)
|
raise AnsibleError("%s does not look like a chrootable dir (/bin/sh missing)" % self.chroot)
|
||||||
|
|
||||||
def _connect(self):
|
def _connect(self):
|
||||||
""" connect to the chroot """
|
''' connect to the chroot '''
|
||||||
if os.path.isabs(self.get_option('chroot_exe')):
|
if os.path.isabs(self.get_option('chroot_exe')):
|
||||||
self.chroot_cmd = self.get_option('chroot_exe')
|
self.chroot_cmd = self.get_option('chroot_exe')
|
||||||
else:
|
else:
|
||||||
@@ -111,17 +110,17 @@ class Connection(ConnectionBase):
|
|||||||
self._connected = True
|
self._connected = True
|
||||||
|
|
||||||
def _buffered_exec_command(self, cmd, stdin=subprocess.PIPE):
|
def _buffered_exec_command(self, cmd, stdin=subprocess.PIPE):
|
||||||
""" run a command on the chroot. This is only needed for implementing
|
''' run a command on the chroot. This is only needed for implementing
|
||||||
put_file() get_file() so that we don't have to read the whole file
|
put_file() get_file() so that we don't have to read the whole file
|
||||||
into memory.
|
into memory.
|
||||||
|
|
||||||
compared to exec_command() it looses some niceties like being able to
|
compared to exec_command() it looses some niceties like being able to
|
||||||
return the process's exit code immediately.
|
return the process's exit code immediately.
|
||||||
"""
|
'''
|
||||||
executable = self.get_option('executable')
|
executable = self.get_option('executable')
|
||||||
local_cmd = [self.chroot_cmd, self.chroot, executable, '-c', cmd]
|
local_cmd = [self.chroot_cmd, self.chroot, executable, '-c', cmd]
|
||||||
|
|
||||||
display.vvv("EXEC %s" % local_cmd, host=self.chroot)
|
display.vvv("EXEC %s" % (local_cmd), host=self.chroot)
|
||||||
local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd]
|
local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd]
|
||||||
p = subprocess.Popen(local_cmd, shell=False, stdin=stdin,
|
p = subprocess.Popen(local_cmd, shell=False, stdin=stdin,
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
@@ -129,17 +128,16 @@ class Connection(ConnectionBase):
|
|||||||
return p
|
return p
|
||||||
|
|
||||||
def exec_command(self, cmd, in_data=None, sudoable=False):
|
def exec_command(self, cmd, in_data=None, sudoable=False):
|
||||||
""" run a command on the chroot """
|
''' run a command on the chroot '''
|
||||||
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
||||||
|
|
||||||
p = self._buffered_exec_command(cmd)
|
p = self._buffered_exec_command(cmd)
|
||||||
|
|
||||||
stdout, stderr = p.communicate(in_data)
|
stdout, stderr = p.communicate(in_data)
|
||||||
return p.returncode, stdout, stderr
|
return (p.returncode, stdout, stderr)
|
||||||
|
|
||||||
@staticmethod
|
def _prefix_login_path(self, remote_path):
|
||||||
def _prefix_login_path(remote_path):
|
''' Make sure that we put files into a standard 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.
|
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
|
ssh chooses $HOME but we aren't guaranteed that a home dir will
|
||||||
@@ -147,13 +145,13 @@ class Connection(ConnectionBase):
|
|||||||
This also happens to be the former default.
|
This also happens to be the former default.
|
||||||
|
|
||||||
Can revisit using $HOME instead if it's a problem
|
Can revisit using $HOME instead if it's a problem
|
||||||
"""
|
'''
|
||||||
if not remote_path.startswith(os.path.sep):
|
if not remote_path.startswith(os.path.sep):
|
||||||
remote_path = os.path.join(os.path.sep, remote_path)
|
remote_path = os.path.join(os.path.sep, remote_path)
|
||||||
return os.path.normpath(remote_path)
|
return os.path.normpath(remote_path)
|
||||||
|
|
||||||
def put_file(self, in_path, out_path):
|
def put_file(self, in_path, out_path):
|
||||||
""" transfer a file from local to chroot """
|
''' transfer a file from local to chroot '''
|
||||||
super(Connection, self).put_file(in_path, out_path)
|
super(Connection, self).put_file(in_path, out_path)
|
||||||
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.chroot)
|
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.chroot)
|
||||||
|
|
||||||
@@ -179,7 +177,7 @@ class Connection(ConnectionBase):
|
|||||||
raise AnsibleError("file or module does not exist at: %s" % in_path)
|
raise AnsibleError("file or module does not exist at: %s" % in_path)
|
||||||
|
|
||||||
def fetch_file(self, in_path, out_path):
|
def fetch_file(self, in_path, out_path):
|
||||||
""" fetch a file from chroot to local """
|
''' fetch a file from chroot to local '''
|
||||||
super(Connection, self).fetch_file(in_path, out_path)
|
super(Connection, self).fetch_file(in_path, out_path)
|
||||||
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self.chroot)
|
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self.chroot)
|
||||||
|
|
||||||
@@ -203,6 +201,6 @@ class Connection(ConnectionBase):
|
|||||||
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" % (in_path, out_path, stdout, stderr))
|
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" % (in_path, out_path, stdout, stderr))
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
""" terminate the connection; nothing to do here """
|
''' terminate the connection; nothing to do here '''
|
||||||
super(Connection, self).close()
|
super(Connection, self).close()
|
||||||
self._connected = False
|
self._connected = False
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Based on local.py (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
# Based on local.py (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
||||||
# Based on chroot.py (c) 2013, Maykel Moya <mmoya@speedyrails.com>
|
# Based on chroot.py (c) 2013, Maykel Moya <mmoya@speedyrails.com>
|
||||||
# Copyright (c) 2013, Michael Scherer <misc@zarb.org>
|
# Copyright (c) 2013, Michael Scherer <misc@zarb.org>
|
||||||
@@ -9,7 +8,7 @@ from __future__ import (absolute_import, division, print_function)
|
|||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
DOCUMENTATION = '''
|
||||||
author: Michael Scherer (@mscherer) <misc@zarb.org>
|
author: Michael Scherer (@msherer) <misc@zarb.org>
|
||||||
name: funcd
|
name: funcd
|
||||||
short_description: Use funcd to connect to target
|
short_description: Use funcd to connect to target
|
||||||
description:
|
description:
|
||||||
@@ -45,7 +44,7 @@ display = Display()
|
|||||||
|
|
||||||
|
|
||||||
class Connection(ConnectionBase):
|
class Connection(ConnectionBase):
|
||||||
""" Func-based connections """
|
''' Func-based connections '''
|
||||||
|
|
||||||
has_pipelining = False
|
has_pipelining = False
|
||||||
|
|
||||||
@@ -54,7 +53,6 @@ class Connection(ConnectionBase):
|
|||||||
self.host = host
|
self.host = host
|
||||||
# port is unused, this go on func
|
# port is unused, this go on func
|
||||||
self.port = port
|
self.port = port
|
||||||
self.client = None
|
|
||||||
|
|
||||||
def connect(self, port=None):
|
def connect(self, port=None):
|
||||||
if not HAVE_FUNC:
|
if not HAVE_FUNC:
|
||||||
@@ -64,32 +62,31 @@ class Connection(ConnectionBase):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def exec_command(self, cmd, become_user=None, sudoable=False, executable='/bin/sh', in_data=None):
|
def exec_command(self, cmd, become_user=None, sudoable=False, executable='/bin/sh', in_data=None):
|
||||||
""" run a command on the remote minion """
|
''' run a command on the remote minion '''
|
||||||
|
|
||||||
if in_data:
|
if in_data:
|
||||||
raise AnsibleError("Internal Error: this module does not support optimized module pipelining")
|
raise AnsibleError("Internal Error: this module does not support optimized module pipelining")
|
||||||
|
|
||||||
# totally ignores privlege escalation
|
# totally ignores privlege escalation
|
||||||
display.vvv("EXEC %s" % cmd, host=self.host)
|
display.vvv("EXEC %s" % (cmd), host=self.host)
|
||||||
p = self.client.command.run(cmd)[self.host]
|
p = self.client.command.run(cmd)[self.host]
|
||||||
return p[0], p[1], p[2]
|
return (p[0], p[1], p[2])
|
||||||
|
|
||||||
@staticmethod
|
def _normalize_path(self, path, prefix):
|
||||||
def _normalize_path(path, prefix):
|
|
||||||
if not path.startswith(os.path.sep):
|
if not path.startswith(os.path.sep):
|
||||||
path = os.path.join(os.path.sep, path)
|
path = os.path.join(os.path.sep, path)
|
||||||
normpath = os.path.normpath(path)
|
normpath = os.path.normpath(path)
|
||||||
return os.path.join(prefix, normpath[1:])
|
return os.path.join(prefix, normpath[1:])
|
||||||
|
|
||||||
def put_file(self, in_path, out_path):
|
def put_file(self, in_path, out_path):
|
||||||
""" transfer a file from local to remote """
|
''' transfer a file from local to remote '''
|
||||||
|
|
||||||
out_path = self._normalize_path(out_path, '/')
|
out_path = self._normalize_path(out_path, '/')
|
||||||
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.host)
|
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.host)
|
||||||
self.client.local.copyfile.send(in_path, out_path)
|
self.client.local.copyfile.send(in_path, out_path)
|
||||||
|
|
||||||
def fetch_file(self, in_path, out_path):
|
def fetch_file(self, in_path, out_path):
|
||||||
""" fetch a file from remote to local """
|
''' fetch a file from remote to local '''
|
||||||
|
|
||||||
in_path = self._normalize_path(in_path, '/')
|
in_path = self._normalize_path(in_path, '/')
|
||||||
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self.host)
|
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self.host)
|
||||||
@@ -102,5 +99,5 @@ class Connection(ConnectionBase):
|
|||||||
shutil.rmtree(tmpdir)
|
shutil.rmtree(tmpdir)
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
""" terminate the connection; nothing to do here """
|
''' terminate the connection; nothing to do here '''
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Based on jail.py
|
# Based on jail.py
|
||||||
# (c) 2013, Michael Scherer <misc@zarb.org>
|
# (c) 2013, Michael Scherer <misc@zarb.org>
|
||||||
# (c) 2015, Toshio Kuratomi <tkuratomi@ansible.com>
|
# (c) 2015, Toshio Kuratomi <tkuratomi@ansible.com>
|
||||||
@@ -33,7 +32,7 @@ DOCUMENTATION = '''
|
|||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from ansible_collections.community.general.plugins.connection.jail import Connection as Jail
|
from ansible_collections.community.general.plugins.connection.jail import Connection as Jail
|
||||||
from ansible.module_utils.common.text.converters import to_native
|
from ansible.module_utils._text import to_native
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.utils.display import Display
|
from ansible.utils.display import Display
|
||||||
|
|
||||||
@@ -41,7 +40,7 @@ display = Display()
|
|||||||
|
|
||||||
|
|
||||||
class Connection(Jail):
|
class Connection(Jail):
|
||||||
""" Local iocage based connections """
|
''' Local iocage based connections '''
|
||||||
|
|
||||||
transport = 'community.general.iocage'
|
transport = 'community.general.iocage'
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Based on local.py by Michael DeHaan <michael.dehaan@gmail.com>
|
# Based on local.py by Michael DeHaan <michael.dehaan@gmail.com>
|
||||||
# and chroot.py by Maykel Moya <mmoya@speedyrails.com>
|
# and chroot.py by Maykel Moya <mmoya@speedyrails.com>
|
||||||
# Copyright (c) 2013, Michael Scherer <misc@zarb.org>
|
# Copyright (c) 2013, Michael Scherer <misc@zarb.org>
|
||||||
@@ -36,10 +35,11 @@ import os
|
|||||||
import os.path
|
import os.path
|
||||||
import subprocess
|
import subprocess
|
||||||
import traceback
|
import traceback
|
||||||
|
import ansible.constants as C
|
||||||
|
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.module_utils.six.moves import shlex_quote
|
from ansible.module_utils.six.moves import shlex_quote
|
||||||
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
|
from ansible.module_utils._text import to_bytes, to_native, to_text
|
||||||
from ansible.plugins.connection import ConnectionBase, BUFSIZE
|
from ansible.plugins.connection import ConnectionBase, BUFSIZE
|
||||||
from ansible.utils.display import Display
|
from ansible.utils.display import Display
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ display = Display()
|
|||||||
|
|
||||||
|
|
||||||
class Connection(ConnectionBase):
|
class Connection(ConnectionBase):
|
||||||
""" Local BSD Jail based connections """
|
''' Local BSD Jail based connections '''
|
||||||
|
|
||||||
modified_jailname_key = 'conn_jail_name'
|
modified_jailname_key = 'conn_jail_name'
|
||||||
|
|
||||||
@@ -90,20 +90,20 @@ class Connection(ConnectionBase):
|
|||||||
return to_text(stdout, errors='surrogate_or_strict').split()
|
return to_text(stdout, errors='surrogate_or_strict').split()
|
||||||
|
|
||||||
def _connect(self):
|
def _connect(self):
|
||||||
""" connect to the jail; nothing to do here """
|
''' connect to the jail; nothing to do here '''
|
||||||
super(Connection, self)._connect()
|
super(Connection, self)._connect()
|
||||||
if not self._connected:
|
if not self._connected:
|
||||||
display.vvv(u"ESTABLISH JAIL CONNECTION FOR USER: {0}".format(self._play_context.remote_user), host=self.jail)
|
display.vvv(u"ESTABLISH JAIL CONNECTION FOR USER: {0}".format(self._play_context.remote_user), host=self.jail)
|
||||||
self._connected = True
|
self._connected = True
|
||||||
|
|
||||||
def _buffered_exec_command(self, cmd, stdin=subprocess.PIPE):
|
def _buffered_exec_command(self, cmd, stdin=subprocess.PIPE):
|
||||||
""" run a command on the jail. This is only needed for implementing
|
''' run a command on the jail. This is only needed for implementing
|
||||||
put_file() get_file() so that we don't have to read the whole file
|
put_file() get_file() so that we don't have to read the whole file
|
||||||
into memory.
|
into memory.
|
||||||
|
|
||||||
compared to exec_command() it looses some niceties like being able to
|
compared to exec_command() it looses some niceties like being able to
|
||||||
return the process's exit code immediately.
|
return the process's exit code immediately.
|
||||||
"""
|
'''
|
||||||
|
|
||||||
local_cmd = [self.jexec_cmd]
|
local_cmd = [self.jexec_cmd]
|
||||||
set_env = ''
|
set_env = ''
|
||||||
@@ -123,17 +123,16 @@ class Connection(ConnectionBase):
|
|||||||
return p
|
return p
|
||||||
|
|
||||||
def exec_command(self, cmd, in_data=None, sudoable=False):
|
def exec_command(self, cmd, in_data=None, sudoable=False):
|
||||||
""" run a command on the jail """
|
''' run a command on the jail '''
|
||||||
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
||||||
|
|
||||||
p = self._buffered_exec_command(cmd)
|
p = self._buffered_exec_command(cmd)
|
||||||
|
|
||||||
stdout, stderr = p.communicate(in_data)
|
stdout, stderr = p.communicate(in_data)
|
||||||
return p.returncode, stdout, stderr
|
return (p.returncode, stdout, stderr)
|
||||||
|
|
||||||
@staticmethod
|
def _prefix_login_path(self, remote_path):
|
||||||
def _prefix_login_path(remote_path):
|
''' Make sure that we put files into a standard 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.
|
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
|
ssh chooses $HOME but we aren't guaranteed that a home dir will
|
||||||
@@ -141,13 +140,13 @@ class Connection(ConnectionBase):
|
|||||||
This also happens to be the former default.
|
This also happens to be the former default.
|
||||||
|
|
||||||
Can revisit using $HOME instead if it's a problem
|
Can revisit using $HOME instead if it's a problem
|
||||||
"""
|
'''
|
||||||
if not remote_path.startswith(os.path.sep):
|
if not remote_path.startswith(os.path.sep):
|
||||||
remote_path = os.path.join(os.path.sep, remote_path)
|
remote_path = os.path.join(os.path.sep, remote_path)
|
||||||
return os.path.normpath(remote_path)
|
return os.path.normpath(remote_path)
|
||||||
|
|
||||||
def put_file(self, in_path, out_path):
|
def put_file(self, in_path, out_path):
|
||||||
""" transfer a file from local to jail """
|
''' transfer a file from local to jail '''
|
||||||
super(Connection, self).put_file(in_path, out_path)
|
super(Connection, self).put_file(in_path, out_path)
|
||||||
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.jail)
|
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.jail)
|
||||||
|
|
||||||
@@ -173,7 +172,7 @@ class Connection(ConnectionBase):
|
|||||||
raise AnsibleError("file or module does not exist at: %s" % in_path)
|
raise AnsibleError("file or module does not exist at: %s" % in_path)
|
||||||
|
|
||||||
def fetch_file(self, in_path, out_path):
|
def fetch_file(self, in_path, out_path):
|
||||||
""" fetch a file from jail to local """
|
''' fetch a file from jail to local '''
|
||||||
super(Connection, self).fetch_file(in_path, out_path)
|
super(Connection, self).fetch_file(in_path, out_path)
|
||||||
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self.jail)
|
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self.jail)
|
||||||
|
|
||||||
@@ -197,6 +196,6 @@ class Connection(ConnectionBase):
|
|||||||
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" % (in_path, out_path, to_native(stdout), to_native(stderr)))
|
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" % (in_path, out_path, to_native(stdout), to_native(stderr)))
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
""" terminate the connection; nothing to do here """
|
''' terminate the connection; nothing to do here '''
|
||||||
super(Connection, self).close()
|
super(Connection, self).close()
|
||||||
self._connected = False
|
self._connected = False
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2015, Joerg Thalheim <joerg@higgsboson.tk>
|
# (c) 2015, Joerg Thalheim <joerg@higgsboson.tk>
|
||||||
# Copyright (c) 2017 Ansible Project
|
# Copyright (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -43,13 +42,14 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
from ansible import constants as C
|
||||||
from ansible import errors
|
from ansible import errors
|
||||||
from ansible.module_utils.common.text.converters import to_bytes, to_native
|
from ansible.module_utils._text import to_bytes, to_native
|
||||||
from ansible.plugins.connection import ConnectionBase
|
from ansible.plugins.connection import ConnectionBase
|
||||||
|
|
||||||
|
|
||||||
class Connection(ConnectionBase):
|
class Connection(ConnectionBase):
|
||||||
""" Local lxc based connections """
|
''' Local lxc based connections '''
|
||||||
|
|
||||||
transport = 'community.general.lxc'
|
transport = 'community.general.lxc'
|
||||||
has_pipelining = True
|
has_pipelining = True
|
||||||
@@ -62,7 +62,7 @@ class Connection(ConnectionBase):
|
|||||||
self.container = None
|
self.container = None
|
||||||
|
|
||||||
def _connect(self):
|
def _connect(self):
|
||||||
""" connect to the lxc; nothing to do here """
|
''' connect to the lxc; nothing to do here '''
|
||||||
super(Connection, self)._connect()
|
super(Connection, self)._connect()
|
||||||
|
|
||||||
if not HAS_LIBLXC:
|
if not HAS_LIBLXC:
|
||||||
@@ -77,8 +77,7 @@ class Connection(ConnectionBase):
|
|||||||
if self.container.state == "STOPPED":
|
if self.container.state == "STOPPED":
|
||||||
raise errors.AnsibleError("%s is not running" % self.container_name)
|
raise errors.AnsibleError("%s is not running" % self.container_name)
|
||||||
|
|
||||||
@staticmethod
|
def _communicate(self, pid, in_data, stdin, stdout, stderr):
|
||||||
def _communicate(pid, in_data, stdin, stdout, stderr):
|
|
||||||
buf = {stdout: [], stderr: []}
|
buf = {stdout: [], stderr: []}
|
||||||
read_fds = [stdout, stderr]
|
read_fds = [stdout, stderr]
|
||||||
if in_data:
|
if in_data:
|
||||||
@@ -112,7 +111,7 @@ class Connection(ConnectionBase):
|
|||||||
return fd
|
return fd
|
||||||
|
|
||||||
def exec_command(self, cmd, in_data=None, sudoable=False):
|
def exec_command(self, cmd, in_data=None, sudoable=False):
|
||||||
""" run a command on the chroot """
|
''' run a command on the chroot '''
|
||||||
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
||||||
|
|
||||||
# python2-lxc needs bytes. python3-lxc needs text.
|
# python2-lxc needs bytes. python3-lxc needs text.
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2016 Matt Clay <matt@mystile.com>
|
# (c) 2016 Matt Clay <matt@mystile.com>
|
||||||
# (c) 2017 Ansible Project
|
# (c) 2017 Ansible Project
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
@@ -47,7 +46,7 @@ from distutils.spawn import find_executable
|
|||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleConnectionFailure, AnsibleFileNotFound
|
from ansible.errors import AnsibleError, AnsibleConnectionFailure, AnsibleFileNotFound
|
||||||
from ansible.module_utils.common.text.converters import to_bytes, to_text
|
from ansible.module_utils._text import to_bytes, to_text
|
||||||
from ansible.plugins.connection import ConnectionBase
|
from ansible.plugins.connection import ConnectionBase
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Based on the buildah connection plugin
|
# Based on the buildah connection plugin
|
||||||
# Copyright (c) 2017 Ansible Project
|
# Copyright (c) 2017 Ansible Project
|
||||||
# 2018 Kushal Das
|
# 2018 Kushal Das
|
||||||
@@ -38,9 +37,15 @@ DOCUMENTATION = '''
|
|||||||
# - name: hosts
|
# - name: hosts
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
import shlex
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
import os
|
||||||
|
import base64
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from ansible.module_utils.common.text.converters import to_bytes
|
import ansible.constants as C
|
||||||
|
from ansible.module_utils._text import to_bytes, to_native
|
||||||
from ansible.plugins.connection import ConnectionBase, ensure_connect
|
from ansible.plugins.connection import ConnectionBase, ensure_connect
|
||||||
from ansible.errors import AnsibleConnectionFailure
|
from ansible.errors import AnsibleConnectionFailure
|
||||||
from ansible.utils.display import Display
|
from ansible.utils.display import Display
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Based on local.py (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
# Based on local.py (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
||||||
# Based on chroot.py (c) 2013, Maykel Moya <mmoya@speedyrails.com>
|
# Based on chroot.py (c) 2013, Maykel Moya <mmoya@speedyrails.com>
|
||||||
# Based on func.py
|
# Based on func.py
|
||||||
@@ -17,11 +16,14 @@ DOCUMENTATION = '''
|
|||||||
- This allows you to use existing Saltstack infrastructure to connect to targets.
|
- This allows you to use existing Saltstack infrastructure to connect to targets.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
import re
|
||||||
import os
|
import os
|
||||||
import base64
|
import pty
|
||||||
|
import codecs
|
||||||
|
import subprocess
|
||||||
|
|
||||||
from ansible import errors
|
from ansible.module_utils._text import to_bytes, to_text
|
||||||
from ansible.plugins.connection import ConnectionBase
|
from ansible.module_utils.six.moves import cPickle
|
||||||
|
|
||||||
HAVE_SALTSTACK = False
|
HAVE_SALTSTACK = False
|
||||||
try:
|
try:
|
||||||
@@ -30,9 +32,13 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
import os
|
||||||
|
from ansible import errors
|
||||||
|
from ansible.plugins.connection import ConnectionBase
|
||||||
|
|
||||||
|
|
||||||
class Connection(ConnectionBase):
|
class Connection(ConnectionBase):
|
||||||
""" Salt-based connections """
|
''' Salt-based connections '''
|
||||||
|
|
||||||
has_pipelining = False
|
has_pipelining = False
|
||||||
# while the name of the product is salt, naming that module salt cause
|
# while the name of the product is salt, naming that module salt cause
|
||||||
@@ -51,31 +57,30 @@ class Connection(ConnectionBase):
|
|||||||
self._connected = True
|
self._connected = True
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def exec_command(self, cmd, in_data=None, sudoable=False):
|
def exec_command(self, cmd, sudoable=False, in_data=None):
|
||||||
""" run a command on the remote minion """
|
''' run a command on the remote minion '''
|
||||||
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
||||||
|
|
||||||
if in_data:
|
if in_data:
|
||||||
raise errors.AnsibleError("Internal Error: this module does not support optimized module pipelining")
|
raise errors.AnsibleError("Internal Error: this module does not support optimized module pipelining")
|
||||||
|
|
||||||
self._display.vvv("EXEC %s" % cmd, host=self.host)
|
self._display.vvv("EXEC %s" % (cmd), host=self.host)
|
||||||
# need to add 'true;' to work around https://github.com/saltstack/salt/issues/28077
|
# need to add 'true;' to work around https://github.com/saltstack/salt/issues/28077
|
||||||
res = self.client.cmd(self.host, 'cmd.exec_code_all', ['bash', 'true;' + cmd])
|
res = self.client.cmd(self.host, 'cmd.exec_code_all', ['bash', 'true;' + cmd])
|
||||||
if self.host not in res:
|
if self.host not in res:
|
||||||
raise errors.AnsibleError("Minion %s didn't answer, check if salt-minion is running and the name is correct" % self.host)
|
raise errors.AnsibleError("Minion %s didn't answer, check if salt-minion is running and the name is correct" % self.host)
|
||||||
|
|
||||||
p = res[self.host]
|
p = res[self.host]
|
||||||
return p['retcode'], p['stdout'], p['stderr']
|
return (p['retcode'], p['stdout'], p['stderr'])
|
||||||
|
|
||||||
@staticmethod
|
def _normalize_path(self, path, prefix):
|
||||||
def _normalize_path(path, prefix):
|
|
||||||
if not path.startswith(os.path.sep):
|
if not path.startswith(os.path.sep):
|
||||||
path = os.path.join(os.path.sep, path)
|
path = os.path.join(os.path.sep, path)
|
||||||
normpath = os.path.normpath(path)
|
normpath = os.path.normpath(path)
|
||||||
return os.path.join(prefix, normpath[1:])
|
return os.path.join(prefix, normpath[1:])
|
||||||
|
|
||||||
def put_file(self, in_path, out_path):
|
def put_file(self, in_path, out_path):
|
||||||
""" transfer a file from local to remote """
|
''' transfer a file from local to remote '''
|
||||||
|
|
||||||
super(Connection, self).put_file(in_path, out_path)
|
super(Connection, self).put_file(in_path, out_path)
|
||||||
|
|
||||||
@@ -83,11 +88,11 @@ class Connection(ConnectionBase):
|
|||||||
self._display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.host)
|
self._display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.host)
|
||||||
with open(in_path, 'rb') as in_fh:
|
with open(in_path, 'rb') as in_fh:
|
||||||
content = in_fh.read()
|
content = in_fh.read()
|
||||||
self.client.cmd(self.host, 'hashutil.base64_decodefile', [base64.b64encode(content), out_path])
|
self.client.cmd(self.host, 'hashutil.base64_decodefile', [codecs.encode(content, 'base64'), out_path])
|
||||||
|
|
||||||
# TODO test it
|
# TODO test it
|
||||||
def fetch_file(self, in_path, out_path):
|
def fetch_file(self, in_path, out_path):
|
||||||
""" fetch a file from remote to local """
|
''' fetch a file from remote to local '''
|
||||||
|
|
||||||
super(Connection, self).fetch_file(in_path, out_path)
|
super(Connection, self).fetch_file(in_path, out_path)
|
||||||
|
|
||||||
@@ -97,5 +102,5 @@ class Connection(ConnectionBase):
|
|||||||
open(out_path, 'wb').write(content)
|
open(out_path, 'wb').write(content)
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
""" terminate the connection; nothing to do here """
|
''' terminate the connection; nothing to do here '''
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Based on local.py (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
# Based on local.py (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
||||||
# and chroot.py (c) 2013, Maykel Moya <mmoya@speedyrails.com>
|
# and chroot.py (c) 2013, Maykel Moya <mmoya@speedyrails.com>
|
||||||
# and jail.py (c) 2013, Michael Scherer <misc@zarb.org>
|
# and jail.py (c) 2013, Michael Scherer <misc@zarb.org>
|
||||||
@@ -32,9 +31,10 @@ import os.path
|
|||||||
import subprocess
|
import subprocess
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
|
from ansible import constants as C
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.module_utils.six.moves import shlex_quote
|
from ansible.module_utils.six.moves import shlex_quote
|
||||||
from ansible.module_utils.common.text.converters import to_bytes
|
from ansible.module_utils._text import to_bytes
|
||||||
from ansible.plugins.connection import ConnectionBase, BUFSIZE
|
from ansible.plugins.connection import ConnectionBase, BUFSIZE
|
||||||
from ansible.utils.display import Display
|
from ansible.utils.display import Display
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ display = Display()
|
|||||||
|
|
||||||
|
|
||||||
class Connection(ConnectionBase):
|
class Connection(ConnectionBase):
|
||||||
""" Local zone based connections """
|
''' Local zone based connections '''
|
||||||
|
|
||||||
transport = 'community.general.zone'
|
transport = 'community.general.zone'
|
||||||
has_pipelining = True
|
has_pipelining = True
|
||||||
@@ -75,9 +75,9 @@ class Connection(ConnectionBase):
|
|||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
|
||||||
zones = []
|
zones = []
|
||||||
for line in process.stdout.readlines():
|
for l in process.stdout.readlines():
|
||||||
# 1:work:running:/zones/work:3126dc59-9a07-4829-cde9-a816e4c5040e:native:shared
|
# 1:work:running:/zones/work:3126dc59-9a07-4829-cde9-a816e4c5040e:native:shared
|
||||||
s = line.split(':')
|
s = l.split(':')
|
||||||
if s[1] != 'global':
|
if s[1] != 'global':
|
||||||
zones.append(s[1])
|
zones.append(s[1])
|
||||||
|
|
||||||
@@ -95,20 +95,20 @@ class Connection(ConnectionBase):
|
|||||||
return path + '/root'
|
return path + '/root'
|
||||||
|
|
||||||
def _connect(self):
|
def _connect(self):
|
||||||
""" connect to the zone; nothing to do here """
|
''' connect to the zone; nothing to do here '''
|
||||||
super(Connection, self)._connect()
|
super(Connection, self)._connect()
|
||||||
if not self._connected:
|
if not self._connected:
|
||||||
display.vvv("THIS IS A LOCAL ZONE DIR", host=self.zone)
|
display.vvv("THIS IS A LOCAL ZONE DIR", host=self.zone)
|
||||||
self._connected = True
|
self._connected = True
|
||||||
|
|
||||||
def _buffered_exec_command(self, cmd, stdin=subprocess.PIPE):
|
def _buffered_exec_command(self, cmd, stdin=subprocess.PIPE):
|
||||||
""" run a command on the zone. This is only needed for implementing
|
''' run a command on the zone. This is only needed for implementing
|
||||||
put_file() get_file() so that we don't have to read the whole file
|
put_file() get_file() so that we don't have to read the whole file
|
||||||
into memory.
|
into memory.
|
||||||
|
|
||||||
compared to exec_command() it looses some niceties like being able to
|
compared to exec_command() it looses some niceties like being able to
|
||||||
return the process's exit code immediately.
|
return the process's exit code immediately.
|
||||||
"""
|
'''
|
||||||
# NOTE: zlogin invokes a shell (just like ssh does) so we do not pass
|
# NOTE: zlogin invokes a shell (just like ssh does) so we do not pass
|
||||||
# this through /bin/sh -c here. Instead it goes through the shell
|
# this through /bin/sh -c here. Instead it goes through the shell
|
||||||
# that zlogin selects.
|
# that zlogin selects.
|
||||||
@@ -122,16 +122,16 @@ class Connection(ConnectionBase):
|
|||||||
return p
|
return p
|
||||||
|
|
||||||
def exec_command(self, cmd, in_data=None, sudoable=False):
|
def exec_command(self, cmd, in_data=None, sudoable=False):
|
||||||
""" run a command on the zone """
|
''' run a command on the zone '''
|
||||||
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
||||||
|
|
||||||
p = self._buffered_exec_command(cmd)
|
p = self._buffered_exec_command(cmd)
|
||||||
|
|
||||||
stdout, stderr = p.communicate(in_data)
|
stdout, stderr = p.communicate(in_data)
|
||||||
return p.returncode, stdout, stderr
|
return (p.returncode, stdout, stderr)
|
||||||
|
|
||||||
def _prefix_login_path(self, remote_path):
|
def _prefix_login_path(self, remote_path):
|
||||||
""" Make sure that we put files into a standard 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.
|
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
|
ssh chooses $HOME but we aren't guaranteed that a home dir will
|
||||||
@@ -139,13 +139,13 @@ class Connection(ConnectionBase):
|
|||||||
This also happens to be the former default.
|
This also happens to be the former default.
|
||||||
|
|
||||||
Can revisit using $HOME instead if it's a problem
|
Can revisit using $HOME instead if it's a problem
|
||||||
"""
|
'''
|
||||||
if not remote_path.startswith(os.path.sep):
|
if not remote_path.startswith(os.path.sep):
|
||||||
remote_path = os.path.join(os.path.sep, remote_path)
|
remote_path = os.path.join(os.path.sep, remote_path)
|
||||||
return os.path.normpath(remote_path)
|
return os.path.normpath(remote_path)
|
||||||
|
|
||||||
def put_file(self, in_path, out_path):
|
def put_file(self, in_path, out_path):
|
||||||
""" transfer a file from local to zone """
|
''' transfer a file from local to zone '''
|
||||||
super(Connection, self).put_file(in_path, out_path)
|
super(Connection, self).put_file(in_path, out_path)
|
||||||
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.zone)
|
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.zone)
|
||||||
|
|
||||||
@@ -171,7 +171,7 @@ class Connection(ConnectionBase):
|
|||||||
raise AnsibleError("file or module does not exist at: %s" % in_path)
|
raise AnsibleError("file or module does not exist at: %s" % in_path)
|
||||||
|
|
||||||
def fetch_file(self, in_path, out_path):
|
def fetch_file(self, in_path, out_path):
|
||||||
""" fetch a file from zone to local """
|
''' fetch a file from zone to local '''
|
||||||
super(Connection, self).fetch_file(in_path, out_path)
|
super(Connection, self).fetch_file(in_path, out_path)
|
||||||
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self.zone)
|
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self.zone)
|
||||||
|
|
||||||
@@ -195,6 +195,6 @@ class Connection(ConnectionBase):
|
|||||||
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" % (in_path, out_path, stdout, stderr))
|
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" % (in_path, out_path, stdout, stderr))
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
""" terminate the connection; nothing to do here """
|
''' terminate the connection; nothing to do here '''
|
||||||
super(Connection, self).close()
|
super(Connection, self).close()
|
||||||
self._connected = False
|
self._connected = False
|
||||||
|
|||||||
0
plugins/doc_fragments/__init__.py
Normal file
0
plugins/doc_fragments/__init__.py
Normal file
138
plugins/doc_fragments/_netapp.py
Normal file
138
plugins/doc_fragments/_netapp.py
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright: (c) 2018, Sumit Kumar <sumit4@netapp.com>, chris Archibald <carchi@netapp.com>
|
||||||
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
from __future__ import (absolute_import, division, print_function)
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
|
||||||
|
class ModuleDocFragment(object):
|
||||||
|
|
||||||
|
DOCUMENTATION = r'''
|
||||||
|
options:
|
||||||
|
- See respective platform section for more details
|
||||||
|
requirements:
|
||||||
|
- See respective platform section for more details
|
||||||
|
notes:
|
||||||
|
- Ansible modules are available for the following NetApp Storage Platforms: E-Series, ONTAP, SolidFire
|
||||||
|
'''
|
||||||
|
|
||||||
|
# Documentation fragment for ONTAP (na_cdot)
|
||||||
|
ONTAP = r'''
|
||||||
|
options:
|
||||||
|
hostname:
|
||||||
|
required: true
|
||||||
|
description:
|
||||||
|
- The hostname or IP address of the ONTAP instance.
|
||||||
|
username:
|
||||||
|
required: true
|
||||||
|
description:
|
||||||
|
- This can be a Cluster-scoped or SVM-scoped account, depending on whether a Cluster-level or SVM-level API is required.
|
||||||
|
For more information, please read the documentation U(https://mysupport.netapp.com/NOW/download/software/nmsdk/9.4/).
|
||||||
|
aliases: ['user']
|
||||||
|
password:
|
||||||
|
required: true
|
||||||
|
description:
|
||||||
|
- Password for the specified user.
|
||||||
|
aliases: ['pass']
|
||||||
|
requirements:
|
||||||
|
- A physical or virtual clustered Data ONTAP system. The modules were developed with Clustered Data ONTAP 8.3
|
||||||
|
- Ansible 2.2
|
||||||
|
- netapp-lib (2015.9.25). Install using 'pip install netapp-lib'
|
||||||
|
|
||||||
|
notes:
|
||||||
|
- The modules prefixed with na\\_cdot are built to support the ONTAP storage platform.
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
# Documentation fragment for SolidFire
|
||||||
|
SOLIDFIRE = r'''
|
||||||
|
options:
|
||||||
|
hostname:
|
||||||
|
required: true
|
||||||
|
description:
|
||||||
|
- The hostname or IP address of the SolidFire cluster.
|
||||||
|
username:
|
||||||
|
required: true
|
||||||
|
description:
|
||||||
|
- Please ensure that the user has the adequate permissions. For more information, please read the official documentation
|
||||||
|
U(https://mysupport.netapp.com/documentation/docweb/index.html?productID=62636&language=en-US).
|
||||||
|
aliases: ['user']
|
||||||
|
password:
|
||||||
|
required: true
|
||||||
|
description:
|
||||||
|
- Password for the specified user.
|
||||||
|
aliases: ['pass']
|
||||||
|
|
||||||
|
requirements:
|
||||||
|
- The modules were developed with SolidFire 10.1
|
||||||
|
- solidfire-sdk-python (1.1.0.92) or greater. Install using 'pip install solidfire-sdk-python'
|
||||||
|
|
||||||
|
notes:
|
||||||
|
- The modules prefixed with na\\_elementsw are built to support the SolidFire storage platform.
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
# Documentation fragment for ONTAP (na_ontap)
|
||||||
|
NA_ONTAP = r'''
|
||||||
|
options:
|
||||||
|
hostname:
|
||||||
|
description:
|
||||||
|
- The hostname or IP address of the ONTAP instance.
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
username:
|
||||||
|
description:
|
||||||
|
- This can be a Cluster-scoped or SVM-scoped account, depending on whether a Cluster-level or SVM-level API is required.
|
||||||
|
For more information, please read the documentation U(https://mysupport.netapp.com/NOW/download/software/nmsdk/9.4/).
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
aliases: [ user ]
|
||||||
|
password:
|
||||||
|
description:
|
||||||
|
- Password for the specified user.
|
||||||
|
type: str
|
||||||
|
required: true
|
||||||
|
aliases: [ pass ]
|
||||||
|
https:
|
||||||
|
description:
|
||||||
|
- Enable and disable https
|
||||||
|
type: bool
|
||||||
|
default: no
|
||||||
|
validate_certs:
|
||||||
|
description:
|
||||||
|
- If set to C(no), the SSL certificates will not be validated.
|
||||||
|
- This should only set to C(False) used on personally controlled sites using self-signed certificates.
|
||||||
|
type: bool
|
||||||
|
default: yes
|
||||||
|
http_port:
|
||||||
|
description:
|
||||||
|
- Override the default port (80 or 443) with this port
|
||||||
|
type: int
|
||||||
|
ontapi:
|
||||||
|
description:
|
||||||
|
- The ontap api version to use
|
||||||
|
type: int
|
||||||
|
use_rest:
|
||||||
|
description:
|
||||||
|
- REST API if supported by the target system for all the resources and attributes the module requires. Otherwise will revert to ZAPI.
|
||||||
|
- Always -- will always use the REST API
|
||||||
|
- Never -- will always use the ZAPI
|
||||||
|
- Auto -- will try to use the REST Api
|
||||||
|
default: Auto
|
||||||
|
choices: ['Never', 'Always', 'Auto']
|
||||||
|
type: str
|
||||||
|
|
||||||
|
|
||||||
|
requirements:
|
||||||
|
- A physical or virtual clustered Data ONTAP system. The modules support Data ONTAP 9.1 and onward
|
||||||
|
- Ansible 2.6
|
||||||
|
- Python2 netapp-lib (2017.10.30) or later. Install using 'pip install netapp-lib'
|
||||||
|
- Python3 netapp-lib (2018.11.13) or later. Install using 'pip install netapp-lib'
|
||||||
|
- To enable http on the cluster you must run the following commands 'set -privilege advanced;' 'system services web modify -http-enabled true;'
|
||||||
|
|
||||||
|
notes:
|
||||||
|
- The modules prefixed with na\\_ontap are built to support the ONTAP storage platform.
|
||||||
|
|
||||||
|
'''
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright: (c) 2019, Evgeniy Krysanov <evgeniy.krysanov@gmail.com>
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleDocFragment(object):
|
|
||||||
|
|
||||||
# Standard documentation fragment
|
|
||||||
DOCUMENTATION = r'''
|
|
||||||
options:
|
|
||||||
client_id:
|
|
||||||
description:
|
|
||||||
- The OAuth consumer key.
|
|
||||||
- If not set the environment variable C(BITBUCKET_CLIENT_ID) will be used.
|
|
||||||
type: str
|
|
||||||
client_secret:
|
|
||||||
description:
|
|
||||||
- The OAuth consumer secret.
|
|
||||||
- If not set the environment variable C(BITBUCKET_CLIENT_SECRET) will be used.
|
|
||||||
type: str
|
|
||||||
user:
|
|
||||||
description:
|
|
||||||
- The username.
|
|
||||||
- If not set the environment variable C(BITBUCKET_USERNAME) will be used.
|
|
||||||
type: str
|
|
||||||
version_added: 4.0.0
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- The App password.
|
|
||||||
- If not set the environment variable C(BITBUCKET_PASSWORD) will be used.
|
|
||||||
type: str
|
|
||||||
version_added: 4.0.0
|
|
||||||
notes:
|
|
||||||
- Bitbucket OAuth consumer key and secret can be obtained from Bitbucket profile -> Settings -> Access Management -> OAuth.
|
|
||||||
- Bitbucket App password can be created from Bitbucket profile -> Personal Settings -> App passwords.
|
|
||||||
- If both OAuth and Basic Auth credentials are passed, OAuth credentials take precedence.
|
|
||||||
'''
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright: (c) 2018, Hewlett Packard Enterprise Development LP
|
# Copyright: (c) 2018, Hewlett Packard Enterprise Development LP
|
||||||
# GNU General Public License v3.0+
|
# GNU General Public License v3.0+
|
||||||
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright: (c) 2018, Huawei Inc.
|
# Copyright: (c) 2018, Huawei Inc.
|
||||||
# GNU General Public License v3.0+
|
# GNU General Public License v3.0+
|
||||||
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
103
plugins/doc_fragments/nios.py
Normal file
103
plugins/doc_fragments/nios.py
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright: (c) 2015, Peter Sprygada <psprygada@ansible.com>
|
||||||
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
from __future__ import (absolute_import, division, print_function)
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
|
||||||
|
class ModuleDocFragment(object):
|
||||||
|
|
||||||
|
# Standard files documentation fragment
|
||||||
|
DOCUMENTATION = r'''
|
||||||
|
options:
|
||||||
|
provider:
|
||||||
|
description:
|
||||||
|
- A dict object containing connection details.
|
||||||
|
type: dict
|
||||||
|
suboptions:
|
||||||
|
host:
|
||||||
|
description:
|
||||||
|
- Specifies the DNS host name or address for connecting to the remote
|
||||||
|
instance of NIOS WAPI over REST
|
||||||
|
- Value can also be specified using C(INFOBLOX_HOST) environment
|
||||||
|
variable.
|
||||||
|
type: str
|
||||||
|
username:
|
||||||
|
description:
|
||||||
|
- Configures the username to use to authenticate the connection to
|
||||||
|
the remote instance of NIOS.
|
||||||
|
- Value can also be specified using C(INFOBLOX_USERNAME) environment
|
||||||
|
variable.
|
||||||
|
type: str
|
||||||
|
password:
|
||||||
|
description:
|
||||||
|
- Specifies the password to use to authenticate the connection to
|
||||||
|
the remote instance of NIOS.
|
||||||
|
- Value can also be specified using C(INFOBLOX_PASSWORD) environment
|
||||||
|
variable.
|
||||||
|
type: str
|
||||||
|
validate_certs:
|
||||||
|
description:
|
||||||
|
- Boolean value to enable or disable verifying SSL certificates
|
||||||
|
- Value can also be specified using C(INFOBLOX_SSL_VERIFY) environment
|
||||||
|
variable.
|
||||||
|
type: bool
|
||||||
|
default: no
|
||||||
|
aliases: [ ssl_verify ]
|
||||||
|
http_request_timeout:
|
||||||
|
description:
|
||||||
|
- The amount of time before to wait before receiving a response
|
||||||
|
- Value can also be specified using C(INFOBLOX_HTTP_REQUEST_TIMEOUT) environment
|
||||||
|
variable.
|
||||||
|
type: int
|
||||||
|
default: 10
|
||||||
|
max_retries:
|
||||||
|
description:
|
||||||
|
- Configures the number of attempted retries before the connection
|
||||||
|
is declared usable
|
||||||
|
- Value can also be specified using C(INFOBLOX_MAX_RETRIES) environment
|
||||||
|
variable.
|
||||||
|
type: int
|
||||||
|
default: 3
|
||||||
|
wapi_version:
|
||||||
|
description:
|
||||||
|
- Specifies the version of WAPI to use
|
||||||
|
- Value can also be specified using C(INFOBLOX_WAP_VERSION) environment
|
||||||
|
variable.
|
||||||
|
- Until ansible 2.8 the default WAPI was 1.4
|
||||||
|
type: str
|
||||||
|
default: '2.1'
|
||||||
|
max_results:
|
||||||
|
description:
|
||||||
|
- Specifies the maximum number of objects to be returned,
|
||||||
|
if set to a negative number the appliance will return an error when the
|
||||||
|
number of returned objects would exceed the setting.
|
||||||
|
- Value can also be specified using C(INFOBLOX_MAX_RESULTS) environment
|
||||||
|
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.
|
||||||
|
|
||||||
|
'''
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018, Oracle and/or its affiliates.
|
# Copyright (c) 2018, Oracle and/or its affiliates.
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018, Oracle and/or its affiliates.
|
# Copyright (c) 2018, Oracle and/or its affiliates.
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018, Oracle and/or its affiliates.
|
# Copyright (c) 2018, Oracle and/or its affiliates.
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018, Oracle and/or its affiliates.
|
# Copyright (c) 2018, Oracle and/or its affiliates.
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018, Oracle and/or its affiliates.
|
# Copyright (c) 2018, Oracle and/or its affiliates.
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018, Oracle and/or its affiliates.
|
# Copyright (c) 2018, Oracle and/or its affiliates.
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright: (c) 2021, Andreas Botzner <andreas at botzner dot com>
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleDocFragment(object):
|
|
||||||
# Common parameters for Redis modules
|
|
||||||
DOCUMENTATION = r'''
|
|
||||||
options:
|
|
||||||
login_host:
|
|
||||||
description:
|
|
||||||
- Specify the target host running the database.
|
|
||||||
default: localhost
|
|
||||||
type: str
|
|
||||||
login_port:
|
|
||||||
description:
|
|
||||||
- Specify the port to connect to.
|
|
||||||
default: 6379
|
|
||||||
type: int
|
|
||||||
login_user:
|
|
||||||
description:
|
|
||||||
- Specify the user to authenticate with.
|
|
||||||
- Requires L(redis,https://pypi.org/project/redis) >= 3.4.0.
|
|
||||||
type: str
|
|
||||||
login_password:
|
|
||||||
description:
|
|
||||||
- Specify the password to authenticate with.
|
|
||||||
- Usually not used when target is localhost.
|
|
||||||
type: str
|
|
||||||
tls:
|
|
||||||
description:
|
|
||||||
- Specify whether or not to use TLS for the connection.
|
|
||||||
type: bool
|
|
||||||
default: true
|
|
||||||
validate_certs:
|
|
||||||
description:
|
|
||||||
- Specify whether or not to validate TLS certificates.
|
|
||||||
- This should only be turned off for personally controlled sites or with
|
|
||||||
C(localhost) as target.
|
|
||||||
type: bool
|
|
||||||
default: true
|
|
||||||
ca_certs:
|
|
||||||
description:
|
|
||||||
- Path to root certificates file. If not set and I(tls) is
|
|
||||||
set to C(true), certifi ca-certificates will be used.
|
|
||||||
type: str
|
|
||||||
requirements: [ "redis", "certifi" ]
|
|
||||||
|
|
||||||
notes:
|
|
||||||
- Requires the C(redis) Python package on the remote host. You can
|
|
||||||
install it with pip (C(pip install redis)) or with a package manager.
|
|
||||||
Information on the library can be found at U(https://github.com/andymccurdy/redis-py).
|
|
||||||
'''
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright: (c) 2021, Phillipe Smith <phsmithcc@gmail.com>
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleDocFragment(object):
|
|
||||||
|
|
||||||
# Standard files documentation fragment
|
|
||||||
DOCUMENTATION = r'''
|
|
||||||
options:
|
|
||||||
url:
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- Rundeck instance URL.
|
|
||||||
required: true
|
|
||||||
api_version:
|
|
||||||
type: int
|
|
||||||
description:
|
|
||||||
- Rundeck API version to be used.
|
|
||||||
- API version must be at least 14.
|
|
||||||
default: 39
|
|
||||||
api_token:
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
- Rundeck User API Token.
|
|
||||||
required: true
|
|
||||||
'''
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
#
|
||||||
# Copyright: (c) 2019, Sandeep Kasargod <sandeep@vexata.com>
|
# Copyright: (c) 2019, Sandeep Kasargod <sandeep@vexata.com>
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|||||||
0
plugins/filter/__init__.py
Normal file
0
plugins/filter/__init__.py
Normal file
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (C) 2020 Stanislav German-Evtushenko (@giner) <ginermail@gmail.com>
|
# Copyright (C) 2020 Stanislav German-Evtushenko (@giner) <ginermail@gmail.com>
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from __future__ import absolute_import, division, print_function
|
|||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
from ansible.errors import AnsibleFilterError
|
from ansible.errors import AnsibleFilterError
|
||||||
from ansible.module_utils.common.text.converters import to_native
|
from ansible.module_utils._text import to_native
|
||||||
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.csv import (initialize_dialect, read_csv, CSVError,
|
from ansible_collections.community.general.plugins.module_utils.csv import (initialize_dialect, read_csv, CSVError,
|
||||||
DialectNotAvailableError,
|
DialectNotAvailableError,
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, 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
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleFilterError
|
|
||||||
from ansible.module_utils.common._collections_compat import Mapping, Sequence
|
|
||||||
|
|
||||||
|
|
||||||
def groupby_as_dict(sequence, attribute):
|
|
||||||
'''
|
|
||||||
Given a sequence of dictionaries and an attribute name, returns a dictionary mapping
|
|
||||||
the value of this attribute to the dictionary.
|
|
||||||
|
|
||||||
If multiple dictionaries in the sequence have the same value for this attribute,
|
|
||||||
the filter will fail.
|
|
||||||
'''
|
|
||||||
if not isinstance(sequence, Sequence):
|
|
||||||
raise AnsibleFilterError('Input is not a sequence')
|
|
||||||
|
|
||||||
result = dict()
|
|
||||||
for list_index, element in enumerate(sequence):
|
|
||||||
if not isinstance(element, Mapping):
|
|
||||||
raise AnsibleFilterError('Sequence element #{0} is not a mapping'.format(list_index))
|
|
||||||
if attribute not in element:
|
|
||||||
raise AnsibleFilterError('Attribute not contained in element #{0} of sequence'.format(list_index))
|
|
||||||
result_index = element[attribute]
|
|
||||||
if result_index in result:
|
|
||||||
raise AnsibleFilterError('Multiple sequence entries have attribute value {0!r}'.format(result_index))
|
|
||||||
result[result_index] = element
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
class FilterModule(object):
|
|
||||||
''' Ansible list filters '''
|
|
||||||
|
|
||||||
def filters(self):
|
|
||||||
return {
|
|
||||||
'groupby_as_dict': groupby_as_dict,
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2015, Filipe Niero Felisbino <filipenf@gmail.com>
|
# (c) 2015, Filipe Niero Felisbino <filipenf@gmail.com>
|
||||||
#
|
#
|
||||||
# This file is part of Ansible
|
# This file is part of Ansible
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2015, Filipe Niero Felisbino <filipenf@gmail.com>
|
# (c) 2015, Filipe Niero Felisbino <filipenf@gmail.com>
|
||||||
#
|
#
|
||||||
# This file is part of Ansible
|
# This file is part of Ansible
|
||||||
@@ -36,11 +35,9 @@ def json_query(data, expr):
|
|||||||
raise AnsibleError('You need to install "jmespath" prior to running '
|
raise AnsibleError('You need to install "jmespath" prior to running '
|
||||||
'json_query filter')
|
'json_query filter')
|
||||||
|
|
||||||
# Hack to handle Ansible Unsafe text, AnsibleMapping and AnsibleSequence
|
# Hack to handle Ansible String Types
|
||||||
# See issue: https://github.com/ansible-collections/community.general/issues/320
|
# See issue: https://github.com/ansible-collections/community.general/issues/320
|
||||||
jmespath.functions.REVERSE_TYPES_MAP['string'] = jmespath.functions.REVERSE_TYPES_MAP['string'] + ('AnsibleUnicode', 'AnsibleUnsafeText', )
|
jmespath.functions.REVERSE_TYPES_MAP['string'] = jmespath.functions.REVERSE_TYPES_MAP['string'] + ('AnsibleUnicode', 'AnsibleUnsafeText', )
|
||||||
jmespath.functions.REVERSE_TYPES_MAP['array'] = jmespath.functions.REVERSE_TYPES_MAP['array'] + ('AnsibleSequence', )
|
|
||||||
jmespath.functions.REVERSE_TYPES_MAP['object'] = jmespath.functions.REVERSE_TYPES_MAP['object'] + ('AnsibleMapping', )
|
|
||||||
try:
|
try:
|
||||||
return jmespath.search(expr, data)
|
return jmespath.search(expr, data)
|
||||||
except jmespath.exceptions.JMESPathError as e:
|
except jmespath.exceptions.JMESPathError as e:
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# (c) 2020 Ansible Project
|
# (c) 2020 Ansible Project
|
||||||
#
|
#
|
||||||
# This file is part of Ansible
|
# This file is part of Ansible
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright: (c) 2021, Andrew Pantuso (@ajpantuso) <ajpantuso@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 unicodedata import normalize
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleFilterError, AnsibleFilterTypeError
|
|
||||||
from ansible.module_utils.six import text_type
|
|
||||||
|
|
||||||
|
|
||||||
def unicode_normalize(data, form='NFC'):
|
|
||||||
"""Applies normalization to 'unicode' strings.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
data: A unicode string piped into the Jinja filter
|
|
||||||
form: One of ('NFC', 'NFD', 'NFKC', 'NFKD').
|
|
||||||
See https://docs.python.org/3/library/unicodedata.html#unicodedata.normalize for more information.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A normalized unicode string of the specified 'form'.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if not isinstance(data, text_type):
|
|
||||||
raise AnsibleFilterTypeError("%s is not a valid input type" % type(data))
|
|
||||||
|
|
||||||
if form not in ('NFC', 'NFD', 'NFKC', 'NFKD'):
|
|
||||||
raise AnsibleFilterError("%s is not a valid form" % form)
|
|
||||||
|
|
||||||
return normalize(form, data)
|
|
||||||
|
|
||||||
|
|
||||||
class FilterModule(object):
|
|
||||||
def filters(self):
|
|
||||||
return {
|
|
||||||
'unicode_normalize': unicode_normalize,
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (C) 2021 Eric Lavarde <elavarde@redhat.com>
|
# Copyright (C) 2021 Eric Lavarde <elavarde@redhat.com>
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
|||||||
0
plugins/inventory/__init__.py
Normal file
0
plugins/inventory/__init__.py
Normal file
@@ -72,7 +72,7 @@ from distutils.version import LooseVersion
|
|||||||
import socket
|
import socket
|
||||||
|
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
|
from ansible.module_utils._text import to_bytes, to_native, to_text
|
||||||
from ansible.module_utils.common._collections_compat import MutableMapping
|
from ansible.module_utils.common._collections_compat import MutableMapping
|
||||||
from ansible.module_utils.six import iteritems
|
from ansible.module_utils.six import iteritems
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, to_safe_group_name
|
from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, to_safe_group_name
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ keyed_groups:
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleParserError
|
from ansible.errors import AnsibleError, AnsibleParserError
|
||||||
from ansible.module_utils.common.text.converters import to_native
|
from ansible.module_utils._text import to_native
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user