Compare commits
142 Commits
v2.13.4rc1
...
v2.6.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 8ce3bd6dea | |||
| f91fb2ea5e | |||
| 478ab3f8b1 | |||
| bd1ecd016b | |||
| 08e016780b | |||
| c15f99f95a | |||
| cfb4a8236f | |||
| 12d15b7dd6 | |||
| f9c17f6337 | |||
| b42a191095 | |||
| 701d61531c | |||
| 0f477d1318 | |||
| a96f456ac2 | |||
| 9917d648e5 | |||
| 25ad5fa225 | |||
| 8fafecc979 | |||
| 1fe98e3066 | |||
| 7cb2486fad | |||
| 82b0ee21f7 | |||
| a3e16b1090 | |||
| e3a1aef586 | |||
| 88d0e2a04a | |||
| 273fb57ea8 | |||
| 5e10424f31 | |||
| 96896654bd | |||
| 8ddb4c3b0d | |||
| 9ce55f7e94 | |||
| 4930710af2 | |||
| d95cf17dd4 | |||
| 8ad8db42e3 | |||
| 544c9e1f32 | |||
| 933ca5a41b | |||
| d11a190349 | |||
| 3030625d1f | |||
| 79a415d4a0 | |||
| ed5e619083 | |||
| 1eeb1bbf7d | |||
| f5a9e007ce | |||
| 6da22edb9e | |||
| f58780fb28 | |||
| d66dc0dcf3 | |||
| 5dd90fb752 | |||
| ec87203d4b | |||
| ccf2d9c8cc | |||
| 3278ef4a6b | |||
| 1a5ba963b6 | |||
| bf1cc2f1f4 | |||
| f9f368f123 | |||
| 8a0f575981 | |||
| aa6954e4ee | |||
| dcfea7d822 | |||
| 09aae2e33d | |||
| b6ec3242fd | |||
| 0f50c2f1d7 | |||
| 70f4f89178 | |||
| 6cdc3ac057 | |||
| 2ef929029d | |||
| cda4b6dad1 | |||
| d3a9f77361 | |||
| 36c626977c | |||
| f70978c0b9 | |||
| c4f4d8c1a5 | |||
| 28e16eaad8 | |||
| 9ae2050e2f | |||
| 3bc9a04f86 | |||
| e458807129 | |||
| 4c6642debd | |||
| b93f579ead | |||
| aad1940e61 | |||
| 6c505e9ef1 | |||
| eb672bfba3 | |||
| 1a673cb772 | |||
| 33f3ba18f0 | |||
| 269c60cc7a | |||
| c03373921d | |||
| 96929acd5e | |||
| adef72393e | |||
| ca992f5aba | |||
| 3ed8300dff | |||
| b13dd0cac1 | |||
| 3fffc208f7 | |||
| 97c6805d47 | |||
| c87e26449a | |||
| c77bcdf3a7 | |||
| 2e7c09e967 | |||
| 34f08b4eb5 | |||
| c168cd482c | |||
| f74312e2bd | |||
| 094c9e7a3d | |||
| 4a1eb1c191 | |||
| f52b37e94a | |||
| c5484e845a | |||
| 5417a373bc | |||
| 594b81f73e | |||
| f54b9e4dd8 | |||
| 5503285c20 | |||
| db3a3ddfa9 | |||
| 0a6c643e8e | |||
| ddb60ce345 | |||
| 14acce0b44 | |||
| 9823432ec3 | |||
| 25d52697af | |||
| 121139b755 | |||
| 73b5c997f4 | |||
| 74a56f0ca1 | |||
| e24743ff19 | |||
| 773fdeb6f0 | |||
| e8d8fa4e1a | |||
| 1ab973c3d3 | |||
| fb3f0a53d9 | |||
| 205b66ee7c | |||
| eedf5d6c6d | |||
| 8d345c7cd6 | |||
| 08aeeefa90 | |||
| 7d3ce99a6f | |||
| 4536fcc722 | |||
| cfc67ce177 | |||
| 6e7bdb04ee | |||
| 8f2c34fc69 | |||
| 741e09f984 | |||
| 65d96bf354 | |||
| cad351328d | |||
| ca3c0dfaea | |||
| 42661ba459 | |||
| 7f50d11806 | |||
| 1ea5790f56 | |||
| a3178a1153 | |||
| 079a1c3d06 | |||
| 9bb260b543 | |||
| 707f069fe8 | |||
| 87a163064f | |||
| a2ca2e2a25 | |||
| 0c907779a4 | |||
| b184e73b89 | |||
| 848327a6b5 | |||
| 592c6877b5 | |||
| 58f018e367 | |||
| 828d878bf9 | |||
| b97a47ac2c | |||
| a018a1e6d4 | |||
| 882f249f1d | |||
| 3f83e7e473 |
@ -1,217 +0,0 @@
|
||||
trigger:
|
||||
batch: true
|
||||
branches:
|
||||
include:
|
||||
- devel
|
||||
- stable-*
|
||||
|
||||
pr:
|
||||
autoCancel: true
|
||||
branches:
|
||||
include:
|
||||
- devel
|
||||
- stable-*
|
||||
|
||||
schedules:
|
||||
- cron: 0 7 * * *
|
||||
displayName: Nightly
|
||||
always: true
|
||||
branches:
|
||||
include:
|
||||
- devel
|
||||
- stable-*
|
||||
|
||||
variables:
|
||||
- name: checkoutPath
|
||||
value: ansible
|
||||
- name: coverageBranches
|
||||
value: devel
|
||||
- name: entryPoint
|
||||
value: test/utils/shippable/shippable.sh
|
||||
- name: fetchDepth
|
||||
value: 500
|
||||
|
||||
resources:
|
||||
containers:
|
||||
- container: default
|
||||
image: quay.io/ansible/azure-pipelines-test-container:3.0.0
|
||||
|
||||
pool: Standard
|
||||
|
||||
stages:
|
||||
- stage: Sanity
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
nameFormat: Test {0}
|
||||
testFormat: sanity/{0}
|
||||
targets:
|
||||
- test: 1
|
||||
- test: 2
|
||||
- test: 3
|
||||
- test: 4
|
||||
- test: 5
|
||||
- stage: Units
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
nameFormat: Python {0}
|
||||
testFormat: units/{0}
|
||||
targets:
|
||||
- test: 2.7
|
||||
- test: 3.5
|
||||
- test: 3.6
|
||||
- test: 3.7
|
||||
- test: 3.8
|
||||
- test: 3.9
|
||||
- test: '3.10'
|
||||
- stage: Windows
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
nameFormat: Server {0}
|
||||
testFormat: windows/{0}/1
|
||||
targets:
|
||||
- test: 2012
|
||||
- test: 2012-R2
|
||||
- test: 2016
|
||||
- test: 2019
|
||||
- test: 2022
|
||||
- stage: Remote
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
targets:
|
||||
- name: macOS 12.0
|
||||
test: macos/12.0
|
||||
- name: RHEL 7.9
|
||||
test: rhel/7.9
|
||||
- name: RHEL 8.5 py36
|
||||
test: rhel/8.5@3.6
|
||||
- name: RHEL 8.5 py38
|
||||
test: rhel/8.5@3.8
|
||||
- name: RHEL 9.0
|
||||
test: rhel/9.0
|
||||
- name: FreeBSD 12.3
|
||||
test: freebsd/12.3
|
||||
- name: FreeBSD 13.0
|
||||
test: freebsd/13.0
|
||||
groups:
|
||||
- 1
|
||||
- 2
|
||||
- 3
|
||||
- 4
|
||||
- 5
|
||||
- stage: Docker
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
testFormat: linux/{0}
|
||||
targets:
|
||||
- name: Alpine 3
|
||||
test: alpine3
|
||||
- name: CentOS 7
|
||||
test: centos7
|
||||
- name: Fedora 34
|
||||
test: fedora34
|
||||
- name: Fedora 35
|
||||
test: fedora35
|
||||
- name: openSUSE 15 py2
|
||||
test: opensuse15py2
|
||||
- name: openSUSE 15 py3
|
||||
test: opensuse15
|
||||
- name: Ubuntu 18.04
|
||||
test: ubuntu1804
|
||||
- name: Ubuntu 20.04
|
||||
test: ubuntu2004
|
||||
groups:
|
||||
- 1
|
||||
- 2
|
||||
- 3
|
||||
- 4
|
||||
- 5
|
||||
- stage: Galaxy
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
nameFormat: Python {0}
|
||||
testFormat: galaxy/{0}/1
|
||||
targets:
|
||||
- test: 3.8
|
||||
- test: 3.9
|
||||
- test: '3.10'
|
||||
- stage: Generic
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
nameFormat: Python {0}
|
||||
testFormat: generic/{0}/1
|
||||
targets:
|
||||
- test: 3.8
|
||||
- test: 3.9
|
||||
- test: '3.10'
|
||||
- stage: Incidental_Remote
|
||||
displayName: Incidental Remote
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
testFormat: i/{0}
|
||||
targets:
|
||||
- name: RHEL 8.5 py36
|
||||
test: rhel/8.5@3.6
|
||||
- name: RHEL 8.5 py38
|
||||
test: rhel/8.5@3.8
|
||||
- stage: Incidental_Windows
|
||||
displayName: Incidental Windows
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
nameFormat: Server {0}
|
||||
testFormat: i/windows/{0}
|
||||
targets:
|
||||
- test: 2012
|
||||
- test: 2012-R2
|
||||
- test: 2016
|
||||
- test: 2019
|
||||
- test: 2022
|
||||
- stage: Incidental
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: templates/matrix.yml
|
||||
parameters:
|
||||
testFormat: i/{0}/1
|
||||
targets:
|
||||
- name: IOS Python
|
||||
test: ios/csr1000v/
|
||||
- name: VyOS Python
|
||||
test: vyos/1.1.8/
|
||||
- name: AWS Python 2.7
|
||||
test: aws/2.7
|
||||
- name: AWS Python 3.6
|
||||
test: aws/3.6
|
||||
- name: Cloud Python
|
||||
test: cloud/
|
||||
- stage: Summary
|
||||
condition: succeededOrFailed()
|
||||
dependsOn:
|
||||
- Sanity
|
||||
- Units
|
||||
- Windows
|
||||
- Remote
|
||||
- Docker
|
||||
- Galaxy
|
||||
- Generic
|
||||
- Incidental_Remote
|
||||
- Incidental_Windows
|
||||
- Incidental
|
||||
jobs:
|
||||
- template: templates/coverage.yml
|
||||
@ -1,20 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Aggregate code coverage results for later processing.
|
||||
|
||||
set -o pipefail -eu
|
||||
|
||||
agent_temp_directory="$1"
|
||||
|
||||
PATH="${PWD}/bin:${PATH}"
|
||||
|
||||
mkdir "${agent_temp_directory}/coverage/"
|
||||
|
||||
options=(--venv --color -v)
|
||||
|
||||
ansible-test coverage combine --group-by command --export "${agent_temp_directory}/coverage/" "${options[@]}"
|
||||
|
||||
if ansible-test coverage analyze targets generate --help >/dev/null 2>&1; then
|
||||
# Only analyze coverage if the installed version of ansible-test supports it.
|
||||
# Doing so allows this script to work unmodified for multiple Ansible versions.
|
||||
ansible-test coverage analyze targets generate "${agent_temp_directory}/coverage/coverage-analyze-targets.json" "${options[@]}"
|
||||
fi
|
||||
@ -1,60 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
Combine coverage data from multiple jobs, keeping the data only from the most recent attempt from each job.
|
||||
Coverage artifacts must be named using the format: "Coverage $(System.JobAttempt) {StableUniqueNameForEachJob}"
|
||||
The recommended coverage artifact name format is: Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)
|
||||
Keep in mind that Azure Pipelines does not enforce unique job display names (only names).
|
||||
It is up to pipeline authors to avoid name collisions when deviating from the recommended format.
|
||||
"""
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
"""Main program entry point."""
|
||||
source_directory = sys.argv[1]
|
||||
|
||||
if '/ansible_collections/' in os.getcwd():
|
||||
output_path = "tests/output"
|
||||
else:
|
||||
output_path = "test/results"
|
||||
|
||||
destination_directory = os.path.join(output_path, 'coverage')
|
||||
|
||||
if not os.path.exists(destination_directory):
|
||||
os.makedirs(destination_directory)
|
||||
|
||||
jobs = {}
|
||||
count = 0
|
||||
|
||||
for name in os.listdir(source_directory):
|
||||
match = re.search('^Coverage (?P<attempt>[0-9]+) (?P<label>.+)$', name)
|
||||
label = match.group('label')
|
||||
attempt = int(match.group('attempt'))
|
||||
jobs[label] = max(attempt, jobs.get(label, 0))
|
||||
|
||||
for label, attempt in jobs.items():
|
||||
name = 'Coverage {attempt} {label}'.format(label=label, attempt=attempt)
|
||||
source = os.path.join(source_directory, name)
|
||||
source_files = os.listdir(source)
|
||||
|
||||
for source_file in source_files:
|
||||
source_path = os.path.join(source, source_file)
|
||||
destination_path = os.path.join(destination_directory, source_file + '.' + label)
|
||||
print('"%s" -> "%s"' % (source_path, destination_path))
|
||||
shutil.copyfile(source_path, destination_path)
|
||||
count += 1
|
||||
|
||||
print('Coverage file count: %d' % count)
|
||||
print('##vso[task.setVariable variable=coverageFileCount]%d' % count)
|
||||
print('##vso[task.setVariable variable=outputPath]%s' % output_path)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@ -1,24 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Check the test results and set variables for use in later steps.
|
||||
|
||||
set -o pipefail -eu
|
||||
|
||||
if [[ "$PWD" =~ /ansible_collections/ ]]; then
|
||||
output_path="tests/output"
|
||||
else
|
||||
output_path="test/results"
|
||||
fi
|
||||
|
||||
echo "##vso[task.setVariable variable=outputPath]${output_path}"
|
||||
|
||||
if compgen -G "${output_path}"'/junit/*.xml' > /dev/null; then
|
||||
echo "##vso[task.setVariable variable=haveTestResults]true"
|
||||
fi
|
||||
|
||||
if compgen -G "${output_path}"'/bot/ansible-test-*' > /dev/null; then
|
||||
echo "##vso[task.setVariable variable=haveBotResults]true"
|
||||
fi
|
||||
|
||||
if compgen -G "${output_path}"'/coverage/*' > /dev/null; then
|
||||
echo "##vso[task.setVariable variable=haveCoverageData]true"
|
||||
fi
|
||||
@ -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://ci-files.testing.ansible.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()
|
||||
@ -1,17 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Generate code coverage reports for uploading to Azure Pipelines and codecov.io.
|
||||
|
||||
set -o pipefail -eu
|
||||
|
||||
PATH="${PWD}/bin:${PATH}"
|
||||
|
||||
if ! ansible-test --help >/dev/null 2>&1; then
|
||||
# Install the devel version of ansible-test for generating code coverage reports.
|
||||
# This is only used by Ansible Collections, which are typically tested against multiple Ansible versions (in separate jobs).
|
||||
# Since a version of ansible-test is required that can work the output from multiple older releases, the devel version is used.
|
||||
pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
|
||||
fi
|
||||
|
||||
# Generate stubs using docker (if supported) otherwise fall back to using a virtual environment instead.
|
||||
# The use of docker is required when Powershell code is present, but Ansible 2.12 was the first version to support --docker with coverage.
|
||||
ansible-test coverage xml --group-by command --stub --docker --color -v || ansible-test coverage xml --group-by command --stub --venv --color -v
|
||||
@ -1,34 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Configure the test environment and run the tests.
|
||||
|
||||
set -o pipefail -eu
|
||||
|
||||
entry_point="$1"
|
||||
test="$2"
|
||||
read -r -a coverage_branches <<< "$3" # space separated list of branches to run code coverage on for scheduled builds
|
||||
|
||||
export COMMIT_MESSAGE
|
||||
export COMPLETE
|
||||
export COVERAGE
|
||||
export IS_PULL_REQUEST
|
||||
|
||||
if [ "${SYSTEM_PULLREQUEST_TARGETBRANCH:-}" ]; then
|
||||
IS_PULL_REQUEST=true
|
||||
COMMIT_MESSAGE=$(git log --format=%B -n 1 HEAD^2)
|
||||
else
|
||||
IS_PULL_REQUEST=
|
||||
COMMIT_MESSAGE=$(git log --format=%B -n 1 HEAD)
|
||||
fi
|
||||
|
||||
COMPLETE=
|
||||
COVERAGE=
|
||||
|
||||
if [ "${BUILD_REASON}" = "Schedule" ]; then
|
||||
COMPLETE=yes
|
||||
|
||||
if printf '%s\n' "${coverage_branches[@]}" | grep -q "^${BUILD_SOURCEBRANCHNAME}$"; then
|
||||
COVERAGE=yes
|
||||
fi
|
||||
fi
|
||||
|
||||
"${entry_point}" "${test}" 2>&1 | "$(dirname "$0")/time-command.py"
|
||||
@ -1,25 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
"""Prepends a relative timestamp to each input line from stdin and writes it to stdout."""
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import sys
|
||||
import time
|
||||
|
||||
|
||||
def main():
|
||||
"""Main program entry point."""
|
||||
start = time.time()
|
||||
|
||||
sys.stdin.reconfigure(errors='surrogateescape')
|
||||
sys.stdout.reconfigure(errors='surrogateescape')
|
||||
|
||||
for line in sys.stdin:
|
||||
seconds = time.time() - start
|
||||
sys.stdout.write('%02d:%02d %s' % (seconds // 60, seconds % 60, line))
|
||||
sys.stdout.flush()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@ -1,29 +0,0 @@
|
||||
# This template adds a job for processing code coverage data.
|
||||
# It will upload results to Azure Pipelines and codecov.io.
|
||||
# Use it from a job stage that completes after all other jobs have completed.
|
||||
# This can be done by placing it in a separate summary stage that runs after the test stage(s) have completed.
|
||||
|
||||
jobs:
|
||||
- job: Coverage
|
||||
displayName: Code Coverage
|
||||
container: default
|
||||
workspace:
|
||||
clean: all
|
||||
steps:
|
||||
- checkout: self
|
||||
fetchDepth: $(fetchDepth)
|
||||
path: $(checkoutPath)
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Coverage Data
|
||||
inputs:
|
||||
path: coverage/
|
||||
patterns: "Coverage */*=coverage.combined"
|
||||
- bash: .azure-pipelines/scripts/combine-coverage.py coverage/
|
||||
displayName: Combine Coverage Data
|
||||
- bash: .azure-pipelines/scripts/report-coverage.sh
|
||||
displayName: Generate Coverage Report
|
||||
condition: gt(variables.coverageFileCount, 0)
|
||||
- bash: .azure-pipelines/scripts/publish-codecov.py "$(outputPath)"
|
||||
displayName: Publish to codecov.io
|
||||
condition: gt(variables.coverageFileCount, 0)
|
||||
continueOnError: true
|
||||
@ -1,55 +0,0 @@
|
||||
# This template uses the provided targets and optional groups to generate a matrix which is then passed to the test template.
|
||||
# If this matrix template does not provide the required functionality, consider using the test template directly instead.
|
||||
|
||||
parameters:
|
||||
# A required list of dictionaries, one per test target.
|
||||
# Each item in the list must contain a "test" or "name" key.
|
||||
# Both may be provided. If one is omitted, the other will be used.
|
||||
- name: targets
|
||||
type: object
|
||||
|
||||
# An optional list of values which will be used to multiply the targets list into a matrix.
|
||||
# Values can be strings or numbers.
|
||||
- name: groups
|
||||
type: object
|
||||
default: []
|
||||
|
||||
# An optional format string used to generate the job name.
|
||||
# - {0} is the name of an item in the targets list.
|
||||
- name: nameFormat
|
||||
type: string
|
||||
default: "{0}"
|
||||
|
||||
# An optional format string used to generate the test name.
|
||||
# - {0} is the name of an item in the targets list.
|
||||
- name: testFormat
|
||||
type: string
|
||||
default: "{0}"
|
||||
|
||||
# An optional format string used to add the group to the job name.
|
||||
# {0} is the formatted name of an item in the targets list.
|
||||
# {{1}} is the group -- be sure to include the double "{{" and "}}".
|
||||
- name: nameGroupFormat
|
||||
type: string
|
||||
default: "{0} - {{1}}"
|
||||
|
||||
# An optional format string used to add the group to the test name.
|
||||
# {0} is the formatted test of an item in the targets list.
|
||||
# {{1}} is the group -- be sure to include the double "{{" and "}}".
|
||||
- name: testGroupFormat
|
||||
type: string
|
||||
default: "{0}/{{1}}"
|
||||
|
||||
jobs:
|
||||
- template: test.yml
|
||||
parameters:
|
||||
jobs:
|
||||
- ${{ if eq(length(parameters.groups), 0) }}:
|
||||
- ${{ each target in parameters.targets }}:
|
||||
- name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
|
||||
test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
|
||||
- ${{ if not(eq(length(parameters.groups), 0)) }}:
|
||||
- ${{ each group in parameters.groups }}:
|
||||
- ${{ each target in parameters.targets }}:
|
||||
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
|
||||
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}
|
||||
@ -1,45 +0,0 @@
|
||||
# This template uses the provided list of jobs to create test one or more test jobs.
|
||||
# It can be used directly if needed, or through the matrix template.
|
||||
|
||||
parameters:
|
||||
# A required list of dictionaries, one per test job.
|
||||
# Each item in the list must contain a "job" and "name" key.
|
||||
- name: jobs
|
||||
type: object
|
||||
|
||||
jobs:
|
||||
- ${{ each job in parameters.jobs }}:
|
||||
- job: test_${{ replace(replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_'), '@', '_') }}
|
||||
displayName: ${{ job.name }}
|
||||
container: default
|
||||
workspace:
|
||||
clean: all
|
||||
steps:
|
||||
- checkout: self
|
||||
fetchDepth: $(fetchDepth)
|
||||
path: $(checkoutPath)
|
||||
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
|
||||
displayName: Run Tests
|
||||
- bash: .azure-pipelines/scripts/process-results.sh
|
||||
condition: succeededOrFailed()
|
||||
displayName: Process Results
|
||||
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
|
||||
condition: eq(variables.haveCoverageData, 'true')
|
||||
displayName: Aggregate Coverage Data
|
||||
- task: PublishTestResults@2
|
||||
condition: eq(variables.haveTestResults, 'true')
|
||||
inputs:
|
||||
testResultsFiles: "$(outputPath)/junit/*.xml"
|
||||
displayName: Publish Test Results
|
||||
- task: PublishPipelineArtifact@1
|
||||
condition: eq(variables.haveBotResults, 'true')
|
||||
displayName: Publish Bot Results
|
||||
inputs:
|
||||
targetPath: "$(outputPath)/bot/"
|
||||
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
||||
- task: PublishPipelineArtifact@1
|
||||
condition: eq(variables.haveCoverageData, 'true')
|
||||
displayName: Publish Coverage Data
|
||||
inputs:
|
||||
targetPath: "$(Agent.TempDirectory)/coverage/"
|
||||
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
||||
@ -1,5 +0,0 @@
|
||||
team = "ansible"
|
||||
repo = "ansible"
|
||||
check_sha = "f31421576b00f0b167cdbe61217c31c21a41ac02" # the very first commit in repo
|
||||
fix_commit_msg = false # Don't replace "#" with "GH-"
|
||||
default_branch = "devel"
|
||||
25
.coveragerc
Normal file
25
.coveragerc
Normal file
@ -0,0 +1,25 @@
|
||||
# This configuration file is used for manual execution of coverage
|
||||
# as well as for tests run through ansible-test.
|
||||
|
||||
[run]
|
||||
branch = True
|
||||
|
||||
# Enable concurrency. This also enables parallel mode, which results in
|
||||
# multiple coverage files being created. Concurrency allows us to collect
|
||||
# results from multiple tests simultaneously, as well as supporting multiple
|
||||
# test runs, such as from integration tests.
|
||||
concurrency = multiprocessing
|
||||
parallel = True
|
||||
|
||||
# When running tests through ansible-test, this option is overridden by
|
||||
# the COVERAGE_FILE environment variable. This option is present for
|
||||
# convenience when running coverage manually from this directory.
|
||||
data_file = test/results/coverage/coverage
|
||||
|
||||
# Don't collect or report code coverage from files matching these patterns.
|
||||
omit =
|
||||
*/python*/dist-packages/*
|
||||
*/python*/site-packages/*
|
||||
*/python*/distutils/*
|
||||
*/pyshared/*
|
||||
*/pytest
|
||||
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1 +1,2 @@
|
||||
.github/ export-ignore
|
||||
hacking/ export-ignore
|
||||
|
||||
1279
.github/BOTMETA.yml
vendored
1279
.github/BOTMETA.yml
vendored
File diff suppressed because it is too large
Load Diff
25
.github/CONTRIBUTING.md
vendored
25
.github/CONTRIBUTING.md
vendored
@ -1,25 +0,0 @@
|
||||
# WELCOME TO ANSIBLE GITHUB
|
||||
|
||||
Hi! Nice to see you here!
|
||||
|
||||
## QUESTIONS ?
|
||||
|
||||
Please see the [Community Guide](https://docs.ansible.com/ansible/latest/community/index.html) for information on how to ask questions on the [mailing lists](https://docs.ansible.com/ansible/latest/community/communication.html#mailing-list-information) and IRC.
|
||||
|
||||
The GitHub issue tracker is not the best place for questions for various reasons, but both IRC and the mailing list are very helpful places for those things, as the community page explains best.
|
||||
|
||||
## CONTRIBUTING ?
|
||||
|
||||
By contributing you agree that these contributions are your own (or approved by your employer) and you grant a full, complete, irrevocable copyright license to all users and developers of the project, present and future, pursuant to the license of the project. You can also read the same [CLA](https://docs.ansible.com/ansible/latest/community/contributor_license_agreement.html) on the Ansible docsite.
|
||||
|
||||
Please review the [Community Guide](https://docs.ansible.com/ansible/latest/community/index.html) for more information on contributing to Ansible.
|
||||
|
||||
## BUG TO REPORT ?
|
||||
|
||||
First and foremost, also check the [Community Guide](https://docs.ansible.com/ansible/latest/community/index.html).
|
||||
|
||||
You can report bugs or make enhancement requests at the [Ansible GitHub issue page](http://github.com/ansible/ansible/issues/new/choose) by filling out the issue template that will be presented.
|
||||
|
||||
Also please make sure you are testing on the latest released version of Ansible or the development branch; see the [Installation Guide](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) for details.
|
||||
|
||||
Thanks!
|
||||
59
.github/ISSUE_TEMPLATE.md
vendored
59
.github/ISSUE_TEMPLATE.md
vendored
@ -1 +1,58 @@
|
||||
Please raise issues via the [new interface](https://github.com/ansible/ansible/issues/new/choose)
|
||||
<!---
|
||||
Verify first that your issue/request is not already reported on GitHub.
|
||||
THIS FORM WILL BE READ BY A MACHINE, COMPLETE ALL SECTIONS AS DESCRIBED.
|
||||
Also test if the latest release, and devel branch are affected too.
|
||||
ALWAYS add information AFTER (OUTSIDE) these html comments.
|
||||
Otherwise it may end up being automatically closed by our bot. -->
|
||||
|
||||
##### SUMMARY
|
||||
<!--- Explain the problem briefly -->
|
||||
|
||||
##### ISSUE TYPE
|
||||
<!--- Pick one below and delete the rest -->
|
||||
- Bug Report
|
||||
- Feature Idea
|
||||
- Documentation Report
|
||||
|
||||
##### COMPONENT NAME
|
||||
<!--- Insert, BELOW THIS COMMENT, the name of the module, plugin, task or feature.
|
||||
Do not include extra details here, e.g. "vyos_command" not "the network module vyos_command" or the full path-->
|
||||
|
||||
##### ANSIBLE VERSION
|
||||
<!--- Paste, BELOW THIS COMMENT, verbatim output from "ansible --version" between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
##### CONFIGURATION
|
||||
<!--- If using Ansible 2.4 or above, paste, BELOW THIS COMMENT, the results of "ansible-config dump --only-changed"
|
||||
Otherwise, mention any settings you have changed/added/removed in ansible.cfg
|
||||
(or using the ANSIBLE_* environment variables).-->
|
||||
|
||||
##### OS / ENVIRONMENT
|
||||
<!--- Mention, BELOW THIS COMMENT, the OS you are running Ansible from, and the OS you are
|
||||
managing, or say "N/A" for anything that is not platform-specific.
|
||||
Also mention the specific version of what you are trying to control,
|
||||
e.g. if this is a network bug the version of firmware on the network device.-->
|
||||
|
||||
##### STEPS TO REPRODUCE
|
||||
<!--- For bugs, show exactly how to reproduce the problem, using a minimal test-case.
|
||||
For new features, show how the feature would be used. -->
|
||||
|
||||
<!--- Paste example playbooks or commands between quotes below -->
|
||||
```yaml
|
||||
|
||||
```
|
||||
|
||||
<!--- You can also paste gist.github.com links for larger files -->
|
||||
|
||||
##### EXPECTED RESULTS
|
||||
<!--- What did you expect to happen when running the steps above? -->
|
||||
|
||||
##### ACTUAL RESULTS
|
||||
<!--- What actually happened? If possible run with extra verbosity (-vvvv) -->
|
||||
|
||||
<!--- Paste verbatim command output between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
61
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
61
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
---
|
||||
name: 🐛 Bug report
|
||||
about: Create a report to help us improve
|
||||
|
||||
---
|
||||
|
||||
<!---
|
||||
Verify first that your issue/request is not already reported on GitHub.
|
||||
THIS FORM WILL BE READ BY A MACHINE, COMPLETE ALL SECTIONS AS DESCRIBED.
|
||||
Also test if the latest release, and devel branch are affected too.
|
||||
ALWAYS add information AFTER (OUTSIDE) these html comments.
|
||||
Otherwise it may end up being automatically closed by our bot. -->
|
||||
|
||||
##### SUMMARY
|
||||
<!--- Explain the problem briefly -->
|
||||
|
||||
##### ISSUE TYPE
|
||||
- Bug Report
|
||||
|
||||
##### COMPONENT NAME
|
||||
<!--- Insert, BELOW THIS COMMENT, the name of the module, plugin, task or feature.
|
||||
Do not include extra details here, e.g. "vyos_command" not "the network module vyos_command" or the full path-->
|
||||
|
||||
##### ANSIBLE VERSION
|
||||
<!--- Paste, BELOW THIS COMMENT, verbatim output from "ansible --version" between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
##### CONFIGURATION
|
||||
<!--- If using Ansible 2.4 or above, paste, BELOW THIS COMMENT, the results of "ansible-config dump --only-changed"
|
||||
Otherwise, mention any settings you have changed/added/removed in ansible.cfg
|
||||
(or using the ANSIBLE_* environment variables).-->
|
||||
|
||||
##### OS / ENVIRONMENT
|
||||
<!--- Mention, BELOW THIS COMMENT, the OS you are running Ansible from, and the OS you are
|
||||
managing, or say "N/A" for anything that is not platform-specific.
|
||||
Also mention the specific version of what you are trying to control,
|
||||
e.g. if this is a network bug the version of firmware on the network device.-->
|
||||
|
||||
##### STEPS TO REPRODUCE
|
||||
<!--- For bugs, show exactly how to reproduce the problem, using a minimal test-case.
|
||||
For new features, show how the feature would be used. -->
|
||||
|
||||
<!--- Paste example playbooks or commands between quotes below -->
|
||||
```yaml
|
||||
|
||||
```
|
||||
|
||||
<!--- You can also paste gist.github.com links for larger files -->
|
||||
|
||||
##### EXPECTED RESULTS
|
||||
<!--- What did you expect to happen when running the steps above? -->
|
||||
|
||||
##### ACTUAL RESULTS
|
||||
<!--- What actually happened? If possible run with extra verbosity (-vvvv) -->
|
||||
|
||||
<!--- Paste verbatim command output between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
263
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
263
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -1,263 +0,0 @@
|
||||
---
|
||||
name: 🐛 Bug report
|
||||
description: Create a report to help us improve
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
**Thank you for wanting to report a bug in ansible-core!**
|
||||
|
||||
|
||||
⚠
|
||||
Verify first that your issue is not [already reported on
|
||||
GitHub][issue search] and keep in mind that we may have to keep
|
||||
the current behavior because [every change breaks someone's
|
||||
workflow][XKCD 1172].
|
||||
We try to be mindful about this.
|
||||
|
||||
Also test if the latest release and devel branch are affected too.
|
||||
|
||||
|
||||
**Tip:** If you are seeking community support, please consider
|
||||
[starting a mailing list thread or chatting in IRC][ML||IRC].
|
||||
|
||||
|
||||
|
||||
[ML||IRC]:
|
||||
https://docs.ansible.com/ansible-core/devel/community/communication.html?utm_medium=github&utm_source=issue_form--bug_report.yml#mailing-list-information
|
||||
|
||||
[issue search]: ../search?q=is%3Aissue&type=issues
|
||||
|
||||
[XKCD 1172]: https://xkcd.com/1172/
|
||||
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Summary
|
||||
description: Explain the problem briefly below.
|
||||
placeholder: >-
|
||||
When I try to do X with ansible-core from the devel branch on GitHub, Y
|
||||
breaks in a way Z under the env E. Here are all the details I know
|
||||
about this problem...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Issue Type
|
||||
description: >
|
||||
Please select the single available option in the drop-down.
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
<em>Why?</em>
|
||||
</summary>
|
||||
|
||||
We would do it by ourselves but unfortunatelly, the curent
|
||||
edition of GitHub Issue Forms Alpha does not support this yet 🤷
|
||||
|
||||
|
||||
_We will make it easier in the future, once GitHub
|
||||
supports dropdown defaults. Promise!_
|
||||
|
||||
</details>
|
||||
# FIXME: Once GitHub allows defining the default choice, update this
|
||||
options:
|
||||
- Bug Report
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Component Name
|
||||
description: >
|
||||
Write the short name of the rst file, module, plugin, task or
|
||||
feature below, *use your best guess if unsure*.
|
||||
|
||||
|
||||
**Tip:** Cannot find it in this repository? Please be advised that
|
||||
the source for some parts of the documentation are hosted outside
|
||||
of this repository. If the page you are reporting describes
|
||||
modules/plugins/etc that are not officially supported by the
|
||||
Ansible Core Engineering team, there is a good chance that it is
|
||||
coming from one of the [Ansible Collections maintained by the
|
||||
community][collections org]. If this is the case, please make sure
|
||||
to file an issue under the appropriate project there instead.
|
||||
|
||||
|
||||
[collections org]: /ansible-collections
|
||||
placeholder: dnf, apt, yum, pip, user etc.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Ansible Version
|
||||
description: >-
|
||||
Paste verbatim output from `ansible --version` below, under
|
||||
the prompt line. Please don't wrap it with tripple backticks — your
|
||||
whole input will be turned into a code snippet automatically.
|
||||
render: console
|
||||
value: |
|
||||
$ ansible --version
|
||||
placeholder: |
|
||||
$ ansible --version
|
||||
ansible [core 2.11.0b4.post0] (detached HEAD ref: refs/) last updated 2021/04/02 00:33:35 (GMT +200)
|
||||
config file = None
|
||||
configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
|
||||
ansible python module location = ~/src/github/ansible/ansible/lib/ansible
|
||||
ansible collection location = ~/.ansible/collections:/usr/share/ansible/collections
|
||||
executable location = bin/ansible
|
||||
python version = 3.9.0 (default, Oct 26 2020, 13:08:59) [GCC 10.2.0]
|
||||
jinja version = 2.11.3
|
||||
libyaml = True
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Configuration
|
||||
description: >-
|
||||
Paste verbatim output from `ansible-config dump --only-changed`
|
||||
below, under the prompt line.
|
||||
Please don't wrap it with tripple backticks — your
|
||||
whole input will be turned into a code snippet automatically.
|
||||
render: console
|
||||
value: |
|
||||
$ ansible-config dump --only-changed
|
||||
placeholder: |
|
||||
$ ansible-config dump --only-changed
|
||||
DEFAULT_GATHERING(~/src/github/ansible/ansible/ansible.cfg) = smart
|
||||
DEFAULT_HOST_LIST(~/src/github/ansible/ansible/ansible.cfg) = ['~/src/github/ansible/ansible/hosts']
|
||||
DEFAULT_VAULT_PASSWORD_FILE(~/src/github/ansible/ansible/ansible.cfg) = ~/src/github/ansible/ansible/vault/print-password.sh
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: OS / Environment
|
||||
description: >-
|
||||
Provide all relevant information below, e.g. target OS versions,
|
||||
network device firmware, etc.
|
||||
placeholder: RHEL 8, CentOS Stream etc.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to Reproduce
|
||||
description: |
|
||||
Describe exactly how to reproduce the problem, using a minimal test-case. It would *really* help us understand your problem if you could also pased any playbooks, configs and commands you used.
|
||||
|
||||
**HINT:** You can paste https://gist.github.com links for larger files.
|
||||
value: |
|
||||
<!--- Paste example playbooks or commands between quotes below -->
|
||||
```yaml (paste below)
|
||||
|
||||
```
|
||||
placeholder: |
|
||||
1. Implement the following playbook:
|
||||
|
||||
```yaml
|
||||
---
|
||||
# ping.yml
|
||||
- hosts: all
|
||||
gather_facts: false
|
||||
tasks:
|
||||
- ping:
|
||||
...
|
||||
```
|
||||
2. Then run `ANSIBLE_DEBUG=1 ansible-playbook ping.yml -vvvvv`
|
||||
3. An error occurs.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected Results
|
||||
description: >-
|
||||
Describe what you expected to happen when running the steps above.
|
||||
placeholder: >-
|
||||
I expected X to happen because I assumed Y and was shocked
|
||||
that it did not.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Actual Results
|
||||
description: |
|
||||
Describe what actually happened. If possible run with extra verbosity (`-vvvv`).
|
||||
|
||||
Paste verbatim command output and don't wrap it with tripple backticks — your
|
||||
whole input will be turned into a code snippet automatically.
|
||||
render: console
|
||||
placeholder: >-
|
||||
Certificate did not match expected hostname: files.pythonhosted.org. Certificate: {'notAfter': 'Apr 28 19:20:25 2021 GMT', 'subjectAltName': ((u'DNS', 'r.ssl.fastly.net'), (u'DNS', '*.catchpoint.com'), (u'DNS', '*.cnn.io'), (u'DNS', '*.dollarshaveclub.com'), (u'DNS', '*.eater.com'), (u'DNS', '*.fastly.picmonkey.com'), (u'DNS', '*.files.saymedia-content.com'), (u'DNS', '*.ft.com'), (u'DNS', '*.meetupstatic.com'), (u'DNS', '*.nfl.com'), (u'DNS', '*.pagar.me'), (u'DNS', '*.picmonkey.com'), (u'DNS', '*.realself.com'), (u'DNS', '*.sbnation.com'), (u'DNS', '*.shakr.com'), (u'DNS', '*.streamable.com'), (u'DNS', '*.surfly.com'), (u'DNS', '*.theverge.com'), (u'DNS', '*.thrillist.com'), (u'DNS', '*.vox-cdn.com'), (u'DNS', '*.vox.com'), (u'DNS', '*.voxmedia.com'), (u'DNS', 'eater.com'), (u'DNS', 'ft.com'), (u'DNS', 'i.gse.io'), (u'DNS', 'picmonkey.com'), (u'DNS', 'realself.com'), (u'DNS', 'static.wixstatic.com'), (u'DNS', 'streamable.com'), (u'DNS', 'surfly.com'), (u'DNS', 'theverge.com'), (u'DNS', 'vox-cdn.com'), (u'DNS', 'vox.com'), (u'DNS', 'www.joyent.com')), 'subject': ((('countryName', u'US'),), (('stateOrProvinceName', u'California'),), (('localityName', u'San Francisco'),), (('organizationName', u'Fastly, Inc'),), (('commonName', u'r.ssl.fastly.net'),))}
|
||||
Exception:
|
||||
Traceback (most recent call last):
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/basecommand.py", line 215, in main
|
||||
status = self.run(options, args)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/commands/install.py", line 335, in run
|
||||
wb.build(autobuilding=True)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/wheel.py", line 749, in build
|
||||
self.requirement_set.prepare_files(self.finder)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 380, in prepare_files
|
||||
ignore_dependencies=self.ignore_dependencies))
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 620, in _prepare_file
|
||||
session=self.session, hashes=hashes)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 821, in unpack_url
|
||||
hashes=hashes
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 659, in unpack_http_url
|
||||
hashes)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 853, in _download_http_url
|
||||
stream=True,
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 521, in get
|
||||
return self.request('GET', url, **kwargs)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 386, in request
|
||||
return super(PipSession, self).request(method, url, *args, **kwargs)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 508, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 618, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/cachecontrol/adapter.py", line 47, in send
|
||||
resp = super(CacheControlAdapter, self).send(request, **kw)
|
||||
File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/adapters.py", line 506, in send
|
||||
raise SSLError(e, request=request)
|
||||
SSLError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/ef/ab/aa12712415809bf698e719b307419f953e25344e8f42d557533d7a02b276/netapp_lib-2020.7.16-py2-none-any.whl (Caused by SSLError(CertificateError("hostname 'files.pythonhosted.org' doesn't match either of 'r.ssl.fastly.net', '*.catchpoint.com', '*.cnn.io', '*.dollarshaveclub.com', '*.eater.com', '*.fastly.picmonkey.com', '*.files.saymedia-content.com', '*.ft.com', '*.meetupstatic.com', '*.nfl.com', '*.pagar.me', '*.picmonkey.com', '*.realself.com', '*.sbnation.com', '*.shakr.com', '*.streamable.com', '*.surfly.com', '*.theverge.com', '*.thrillist.com', '*.vox-cdn.com', '*.vox.com', '*.voxmedia.com', 'eater.com', 'ft.com', 'i.gse.io', 'picmonkey.com', 'realself.com', 'static.wixstatic.com', 'streamable.com', 'surfly.com', 'theverge.com', 'vox-cdn.com', 'vox.com', 'www.joyent.com'",),))
|
||||
ERROR: Command "/usr/bin/python2.6 /root/ansible/test/lib/ansible_test/_data/quiet_pip.py install --disable-pip-version-check -r /root/ansible/test/lib/ansible_test/_data/requirements/units.txt -r tests/unit/requirements.txt -c /root/ansible/test/lib/ansible_test/_data/requirements/constraints.txt" returned exit status 2.
|
||||
ERROR: Command "docker exec d47eb360db4ce779c1f690db964655b76e68895c4360ff252c46fe7fe6f5c75a /usr/bin/env ANSIBLE_TEST_CONTENT_ROOT=/root/ansible_collections/netapp/ontap LC_ALL=en_US.UTF-8 /usr/bin/python3.6 /root/ansible/bin/ansible-test units --metadata tests/output/.tmp/metadata-9i2qfrcl.json --truncate 200 --redact --color yes --requirements --python default --requirements-mode only" returned exit status 1.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
*One last thing...*
|
||||
|
||||
|
||||
*Please, complete **all** sections as described, this form
|
||||
is [processed automatically by a robot][ansibot help].*
|
||||
|
||||
|
||||
Thank you for your collaboration!
|
||||
|
||||
|
||||
[ansibot help]:
|
||||
/ansible/ansibullbot/blob/master/ISSUE_HELP.md#for-issue-submitters
|
||||
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Code of Conduct
|
||||
description: |
|
||||
Read the [Ansible Code of Conduct][CoC] first.
|
||||
|
||||
[CoC]: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html?utm_medium=github&utm_source=issue_form--bug_report.yml
|
||||
options:
|
||||
- label: I agree to follow the Ansible Code of Conduct
|
||||
required: true
|
||||
...
|
||||
26
.github/ISSUE_TEMPLATE/config.yml
vendored
26
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,26 +0,0 @@
|
||||
# Ref: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser
|
||||
blank_issues_enabled: false # default: true
|
||||
contact_links:
|
||||
- name: 🔐 Security bug report 🔥
|
||||
url: https://docs.ansible.com/ansible/latest/community/reporting_bugs_and_features.html?utm_medium=github&utm_source=issue_template_chooser
|
||||
about: |
|
||||
Please learn how to report security vulnerabilities here.
|
||||
|
||||
For all security related bugs, email security@ansible.com
|
||||
instead of using this issue tracker and you will receive
|
||||
a prompt response.
|
||||
|
||||
For more information, see
|
||||
https://docs.ansible.com/ansible/latest/community/reporting_bugs_and_features.html
|
||||
- name: 📝 Ansible Code of Conduct
|
||||
url: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html?utm_medium=github&utm_source=issue_template_chooser
|
||||
about: ❤ Be nice to other members of the community. ☮ Behave.
|
||||
- name: 💬 Talks to the community
|
||||
url: https://docs.ansible.com/ansible/latest/community/communication.html?utm_medium=github&utm_source=issue_template_chooser#mailing-list-information
|
||||
about: Please ask and answer usage questions here
|
||||
- name: ⚡ Working groups
|
||||
url: https://github.com/ansible/community/wiki
|
||||
about: Interested in improving a specific area? Become a part of a working group!
|
||||
- name: 💼 For Enterprise
|
||||
url: https://www.ansible.com/products/engine?utm_medium=github&utm_source=issue_template_chooser
|
||||
about: Red Hat offers support for the Ansible Automation Platform
|
||||
61
.github/ISSUE_TEMPLATE/documentation_report.md
vendored
Normal file
61
.github/ISSUE_TEMPLATE/documentation_report.md
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
---
|
||||
name: 📝 Documentation Report
|
||||
about: Ask us about docs
|
||||
|
||||
---
|
||||
|
||||
<!---
|
||||
Verify first that your issue/request is not already reported on GitHub.
|
||||
THIS FORM WILL BE READ BY A MACHINE, COMPLETE ALL SECTIONS AS DESCRIBED.
|
||||
Also test if the latest release, and devel branch are affected too.
|
||||
ALWAYS add information AFTER (OUTSIDE) these html comments.
|
||||
Otherwise it may end up being automatically closed by our bot. -->
|
||||
|
||||
##### SUMMARY
|
||||
<!--- Explain the problem briefly -->
|
||||
|
||||
##### ISSUE TYPE
|
||||
- Documentation Report
|
||||
|
||||
##### COMPONENT NAME
|
||||
<!--- Insert, BELOW THIS COMMENT, the name of the module, plugin, task or feature.
|
||||
Do not include extra details here, e.g. "vyos_command" not "the network module vyos_command" or the full path-->
|
||||
|
||||
##### ANSIBLE VERSION
|
||||
<!--- Paste, BELOW THIS COMMENT, verbatim output from "ansible --version" between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
##### CONFIGURATION
|
||||
<!--- If using Ansible 2.4 or above, paste, BELOW THIS COMMENT, the results of "ansible-config dump --only-changed"
|
||||
Otherwise, mention any settings you have changed/added/removed in ansible.cfg
|
||||
(or using the ANSIBLE_* environment variables).-->
|
||||
|
||||
##### OS / ENVIRONMENT
|
||||
<!--- Mention, BELOW THIS COMMENT, the OS you are running Ansible from, and the OS you are
|
||||
managing, or say "N/A" for anything that is not platform-specific.
|
||||
Also mention the specific version of what you are trying to control,
|
||||
e.g. if this is a network bug the version of firmware on the network device.-->
|
||||
|
||||
##### STEPS TO REPRODUCE
|
||||
<!--- For bugs, show exactly how to reproduce the problem, using a minimal test-case.
|
||||
For new features, show how the feature would be used. -->
|
||||
|
||||
<!--- Paste example playbooks or commands between quotes below -->
|
||||
```yaml
|
||||
|
||||
```
|
||||
|
||||
<!--- You can also paste gist.github.com links for larger files -->
|
||||
|
||||
##### EXPECTED RESULTS
|
||||
<!--- What did you expect to happen when running the steps above? -->
|
||||
|
||||
##### ACTUAL RESULTS
|
||||
<!--- What actually happened? If possible run with extra verbosity (-vvvv) -->
|
||||
|
||||
<!--- Paste verbatim command output between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
199
.github/ISSUE_TEMPLATE/documentation_report.yml
vendored
199
.github/ISSUE_TEMPLATE/documentation_report.yml
vendored
@ -1,199 +0,0 @@
|
||||
---
|
||||
name: 📝 Documentation Report
|
||||
description: Ask us about docs
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
**Thank you for wanting to report a problem with ansible-core
|
||||
documentation!**
|
||||
|
||||
|
||||
Please fill out your suggestions below. If the problem seems
|
||||
straightforward, feel free to go ahead and
|
||||
[submit a pull request] instead!
|
||||
|
||||
|
||||
⚠
|
||||
Verify first that your issue is not [already reported on
|
||||
GitHub][issue search].
|
||||
|
||||
Also test if the latest release and devel branch are affected too.
|
||||
|
||||
|
||||
**Tip:** If you are seeking community support, please consider
|
||||
[starting a mailing list thread or chatting in IRC][ML||IRC].
|
||||
|
||||
|
||||
[ML||IRC]:
|
||||
https://docs.ansible.com/ansible-core/devel/community/communication.html?utm_medium=github&utm_source=issue_form--documentation_report.yml#mailing-list-information
|
||||
|
||||
[issue search]: ../search?q=is%3Aissue&type=issues
|
||||
|
||||
[submit a pull request]:
|
||||
https://docs.ansible.com/ansible-core/devel/community/documentation_contributions.html
|
||||
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Summary
|
||||
description: >
|
||||
Explain the problem briefly below, add suggestions to wording
|
||||
or structure.
|
||||
|
||||
|
||||
**HINT:** Did you know the documentation has a `View on GitHub`
|
||||
link on some pages? Feel free to use it to start a pull request
|
||||
right from the GitHub UI!
|
||||
placeholder: >-
|
||||
I was reading the ansible-core documentation of version X and I'm having
|
||||
problems understanding Y. It would be very helpful if that got
|
||||
rephrased as Z.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Issue Type
|
||||
description: >
|
||||
Please select the single available option in the drop-down.
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
<em>Why?</em>
|
||||
</summary>
|
||||
|
||||
We would do it by ourselves but unfortunatelly, the curent
|
||||
edition of GitHub Issue Forms Alpha does not support this yet 🤷
|
||||
|
||||
|
||||
_We will make it easier in the future, once GitHub
|
||||
supports dropdown defaults. Promise!_
|
||||
|
||||
</details>
|
||||
# FIXME: Once GitHub allows defining the default choice, update this
|
||||
options:
|
||||
- Documentation Report
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Component Name
|
||||
description: >
|
||||
Write the short name of the rst file, module, plugin, task or
|
||||
feature below, *use your best guess if unsure*.
|
||||
|
||||
|
||||
**Tip:** Be advised that the source for some parts of the
|
||||
documentation are hosted outside of this repository. If the page
|
||||
you are reporting describes modules/plugins/etc that are not
|
||||
officially supported by the Ansible Core Engineering team, there
|
||||
is a good chance that it is coming from one of the [Ansible
|
||||
Collections maintained by the community][collections org]. If this
|
||||
is the case, please make sure to file an issue under the
|
||||
appropriate project there instead.
|
||||
|
||||
|
||||
[collections org]: /ansible-collections
|
||||
placeholder: docs/docsite/rst/dev_guide/debugging.rst
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Ansible Version
|
||||
description: >-
|
||||
Paste verbatim output from `ansible --version` below, under
|
||||
the prompt line. Please don't wrap it with tripple backticks — your
|
||||
whole input will be turned into a code snippet automatically.
|
||||
render: console
|
||||
value: |
|
||||
$ ansible --version
|
||||
placeholder: |
|
||||
$ ansible --version
|
||||
ansible [core 2.11.0b4.post0] (detached HEAD ref: refs/) last updated 2021/04/02 00:33:35 (GMT +200)
|
||||
config file = None
|
||||
configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
|
||||
ansible python module location = ~/src/github/ansible/ansible/lib/ansible
|
||||
ansible collection location = ~/.ansible/collections:/usr/share/ansible/collections
|
||||
executable location = bin/ansible
|
||||
python version = 3.9.0 (default, Oct 26 2020, 13:08:59) [GCC 10.2.0]
|
||||
jinja version = 2.11.3
|
||||
libyaml = True
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Configuration
|
||||
description: >-
|
||||
Paste verbatim output from `ansible-config dump --only-changed`
|
||||
below, under the prompt line.
|
||||
Please don't wrap it with tripple backticks — your
|
||||
whole input will be turned into a code snippet automatically.
|
||||
render: console
|
||||
value: |
|
||||
$ ansible-config dump --only-changed
|
||||
placeholder: |
|
||||
$ ansible-config dump --only-changed
|
||||
DEFAULT_GATHERING(~/src/github/ansible/ansible/ansible.cfg) = smart
|
||||
DEFAULT_HOST_LIST(~/src/github/ansible/ansible/ansible.cfg) = ['~/src/github/ansible/ansible/hosts']
|
||||
DEFAULT_VAULT_PASSWORD_FILE(~/src/github/ansible/ansible/ansible.cfg) = ~/src/github/ansible/ansible/vault/print-password.sh
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: OS / Environment
|
||||
description: >-
|
||||
Provide all relevant information below, e.g. OS version,
|
||||
browser, etc.
|
||||
placeholder: Fedora 33, Firefox etc.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional Information
|
||||
description: |
|
||||
Describe how this improves the documentation, e.g. before/after situation or screenshots.
|
||||
|
||||
**HINT:** You can paste https://gist.github.com links for larger files.
|
||||
placeholder: >-
|
||||
When the improvement is applied, it makes it more straightforward
|
||||
to understand X.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
*One last thing...*
|
||||
|
||||
|
||||
*Please, complete **all** sections as described, this form
|
||||
is [processed automatically by a robot][ansibot help].*
|
||||
|
||||
|
||||
Thank you for your collaboration!
|
||||
|
||||
|
||||
[ansibot help]:
|
||||
/ansible/ansibullbot/blob/master/ISSUE_HELP.md#for-issue-submitters
|
||||
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Code of Conduct
|
||||
description: |
|
||||
Read the [Ansible Code of Conduct][CoC] first.
|
||||
|
||||
[CoC]: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html?utm_medium=github&utm_source=issue_form--documentation_report.yml
|
||||
options:
|
||||
- label: I agree to follow the Ansible Code of Conduct
|
||||
required: true
|
||||
...
|
||||
61
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
61
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
---
|
||||
name: ✨ Feature request
|
||||
about: Suggest an idea for this project
|
||||
|
||||
---
|
||||
|
||||
<!---
|
||||
Verify first that your issue/request is not already reported on GitHub.
|
||||
THIS FORM WILL BE READ BY A MACHINE, COMPLETE ALL SECTIONS AS DESCRIBED.
|
||||
Also test if the latest release, and devel branch are affected too.
|
||||
ALWAYS add information AFTER (OUTSIDE) these html comments.
|
||||
Otherwise it may end up being automatically closed by our bot. -->
|
||||
|
||||
##### SUMMARY
|
||||
<!--- Explain the problem briefly -->
|
||||
|
||||
##### ISSUE TYPE
|
||||
- Feature Idea
|
||||
|
||||
##### COMPONENT NAME
|
||||
<!--- Insert, BELOW THIS COMMENT, the name of the module, plugin, task or feature.
|
||||
Do not include extra details here, e.g. "vyos_command" not "the network module vyos_command" or the full path-->
|
||||
|
||||
##### ANSIBLE VERSION
|
||||
<!--- Paste, BELOW THIS COMMENT, verbatim output from "ansible --version" between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
##### CONFIGURATION
|
||||
<!--- If using Ansible 2.4 or above, paste, BELOW THIS COMMENT, the results of "ansible-config dump --only-changed"
|
||||
Otherwise, mention any settings you have changed/added/removed in ansible.cfg
|
||||
(or using the ANSIBLE_* environment variables).-->
|
||||
|
||||
##### OS / ENVIRONMENT
|
||||
<!--- Mention, BELOW THIS COMMENT, the OS you are running Ansible from, and the OS you are
|
||||
managing, or say "N/A" for anything that is not platform-specific.
|
||||
Also mention the specific version of what you are trying to control,
|
||||
e.g. if this is a network bug the version of firmware on the network device.-->
|
||||
|
||||
##### STEPS TO REPRODUCE
|
||||
<!--- For bugs, show exactly how to reproduce the problem, using a minimal test-case.
|
||||
For new features, show how the feature would be used. -->
|
||||
|
||||
<!--- Paste example playbooks or commands between quotes below -->
|
||||
```yaml
|
||||
|
||||
```
|
||||
|
||||
<!--- You can also paste gist.github.com links for larger files -->
|
||||
|
||||
##### EXPECTED RESULTS
|
||||
<!--- What did you expect to happen when running the steps above? -->
|
||||
|
||||
##### ACTUAL RESULTS
|
||||
<!--- What actually happened? If possible run with extra verbosity (-vvvv) -->
|
||||
|
||||
<!--- Paste verbatim command output between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
192
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
192
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@ -1,192 +0,0 @@
|
||||
---
|
||||
name: ✨ Feature request
|
||||
description: Suggest an idea for this project
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
**Thank you for wanting to suggest a feature for ansible-core!**
|
||||
|
||||
|
||||
|
||||
💡
|
||||
Before you go ahead with your request, please first consider if it
|
||||
would be useful for majority of the ansible-core users. As a
|
||||
general rule of thumb, any feature that is only of interest to a
|
||||
small sub group should be [implemented in a third-party Ansible
|
||||
Collection][contribute to collections] or maybe even just your
|
||||
project alone. Be mindful of the fact that the essential
|
||||
ansible-core features have a broad impact.
|
||||
|
||||
If unsure, consider filing a [new proposal] instead outlining your
|
||||
use-cases, the research and implementation considerations. Then,
|
||||
start a discussion on one of the public [IRC meetings] we have just
|
||||
for this.
|
||||
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
❗ Every change breaks someone's workflow.
|
||||
</summary>
|
||||
|
||||
|
||||
[
|
||||
](https://xkcd.com/1172/)
|
||||
</details>
|
||||
|
||||
|
||||
⚠
|
||||
Verify first that your idea is not [already requested on
|
||||
GitHub][issue search].
|
||||
|
||||
Also test if the devel branch does not already implement this.
|
||||
|
||||
|
||||
**Tip:** If you are seeking community support, please consider
|
||||
[starting a mailing list thread or chatting in IRC][ML||IRC].
|
||||
|
||||
|
||||
|
||||
[contribute to collections]:
|
||||
https://docs.ansible.com/ansible-core/devel/community/contributing_maintained_collections.html?utm_medium=github&utm_source=issue_form--feature_request.yml
|
||||
|
||||
[IRC meetings]:
|
||||
https://docs.ansible.com/ansible-core/devel/community/communication.html?utm_medium=github&utm_source=issue_form--feature_request.yml#irc-meetings
|
||||
|
||||
[issue search]: ../search?q=is%3Aissue&type=issues
|
||||
|
||||
[ML||IRC]:
|
||||
https://docs.ansible.com/ansible-core/devel/community/communication.html?utm_medium=github&utm_source=issue_form--feature_request.yml#mailing-list-information
|
||||
|
||||
[new proposal]: ../../proposals/issues/new
|
||||
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Summary
|
||||
description: >
|
||||
Describe the new feature/improvement you would like briefly below.
|
||||
|
||||
|
||||
What's the problem this feature will solve?
|
||||
|
||||
What are you trying to do, that you are unable to achieve
|
||||
with ansible-core as it currently stands?
|
||||
|
||||
|
||||
* Provide examples of real-world use cases that this would enable
|
||||
and how it solves the problem you described.
|
||||
|
||||
* How do you solve this now?
|
||||
|
||||
* Have you tried to work around the problem using other tools?
|
||||
|
||||
* Could there be a different approach to solving this issue?
|
||||
|
||||
|
||||
*Know **exactly** what you want?* Consider filing a [new proposal]
|
||||
instead outlining your research and implementation considerations.
|
||||
|
||||
|
||||
[new proposal]: ../../proposals/issues/new
|
||||
placeholder: >-
|
||||
I am trying to do X with ansible-core from the devel branch on GitHub and
|
||||
I think that implementing a feature Y would be very helpful for me and
|
||||
every other user of ansible-core because of Z.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Issue Type
|
||||
description: >
|
||||
Please select the single available option in the drop-down.
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
<em>Why?</em>
|
||||
</summary>
|
||||
|
||||
We would do it by ourselves but unfortunatelly, the curent
|
||||
edition of GitHub Issue Forms Alpha does not support this yet 🤷
|
||||
|
||||
|
||||
_We will make it easier in the future, once GitHub
|
||||
supports dropdown defaults. Promise!_
|
||||
|
||||
</details>
|
||||
# FIXME: Once GitHub allows defining the default choice, update this
|
||||
options:
|
||||
- Feature Idea
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Component Name
|
||||
description: >
|
||||
Write the short name of the module, plugin, task or feature below,
|
||||
*use your best guess if unsure*.
|
||||
|
||||
|
||||
Be aware that a lot of content that used to reside in this repository
|
||||
previously, is now hosted under [individual collection
|
||||
projects][collections org].
|
||||
If this is the case, please make sure to file an issue under the
|
||||
appropriate project there instead.
|
||||
|
||||
|
||||
[collections org]: /ansible-collections
|
||||
placeholder: dnf, apt, yum, pip, user etc.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional Information
|
||||
description: |
|
||||
Describe how the feature would be used, why it is needed and what it would solve.
|
||||
|
||||
**HINT:** You can paste https://gist.github.com links for larger files.
|
||||
value: |
|
||||
<!--- Paste example playbooks or commands between quotes below -->
|
||||
```yaml (paste below)
|
||||
|
||||
```
|
||||
placeholder: >-
|
||||
I asked on https://stackoverflow.com/.... and the community
|
||||
advised me to do X, Y and Z.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
*One last thing...*
|
||||
|
||||
|
||||
*Please, complete **all** sections as described, this form
|
||||
is [processed automatically by a robot][ansibot help].*
|
||||
|
||||
|
||||
Thank you for your collaboration!
|
||||
|
||||
|
||||
[ansibot help]:
|
||||
/ansible/ansibullbot/blob/master/ISSUE_HELP.md#for-issue-submitters
|
||||
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Code of Conduct
|
||||
description: |
|
||||
Read the [Ansible Code of Conduct][CoC] first.
|
||||
|
||||
[CoC]: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html?utm_medium=github&utm_source=issue_form--feature_request.yml
|
||||
options:
|
||||
- label: I agree to follow the Ansible Code of Conduct
|
||||
required: true
|
||||
...
|
||||
38
.github/PULL_REQUEST_TEMPLATE.md
vendored
38
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,23 +1,33 @@
|
||||
##### SUMMARY
|
||||
<!--- Describe the change below, including rationale and design decisions -->
|
||||
<!--- Describe the change, including rationale and design decisions -->
|
||||
|
||||
<!--- HINT: Include "Fixes #nnn" if you are fixing an existing issue -->
|
||||
<!--- If you are fixing an existing issue, please include "Fixes #nnn" in your
|
||||
commit message and your description; but you should still explain what
|
||||
the change does.-->
|
||||
|
||||
##### ISSUE TYPE
|
||||
<!--- Pick one below and delete the rest -->
|
||||
- Bugfix Pull Request
|
||||
- Docs Pull Request
|
||||
- Feature Pull Request
|
||||
- Test Pull Request
|
||||
<!--- Pick one below and delete the rest: -->
|
||||
- Feature Pull Request
|
||||
- New Module Pull Request
|
||||
- Bugfix Pull Request
|
||||
- Docs Pull Request
|
||||
|
||||
##### COMPONENT NAME
|
||||
<!--- Write the short name of the module, plugin, task or feature below -->
|
||||
<!--- Name of the module, plugin, module or task -->
|
||||
|
||||
##### ADDITIONAL INFORMATION
|
||||
<!--- Include additional information to help people understand the change here -->
|
||||
<!--- A step-by-step reproduction of the problem is helpful if there is no related issue -->
|
||||
|
||||
<!--- Paste verbatim command output below, e.g. before and after your change -->
|
||||
```paste below
|
||||
##### ANSIBLE VERSION
|
||||
<!--- Paste verbatim output from "ansible --version" between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
|
||||
##### ADDITIONAL INFORMATION
|
||||
<!--- Include additional information to help people understand the change here.
|
||||
For bugs that don't have a linked bug report, a step-by-step reproduction
|
||||
of the problem is helpful. -->
|
||||
|
||||
<!--- Paste verbatim command output below, e.g. before and after your change -->
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
15
.github/RELEASE_NAMES.yml
vendored
15
.github/RELEASE_NAMES.yml
vendored
@ -1,15 +0,0 @@
|
||||
---
|
||||
- 2.13.0 Nobody's Fault but Mine
|
||||
- 2.12.0 Dazed and Confused
|
||||
- 2.11.0 Hey Hey, What Can I Do
|
||||
- 2.10.0 When the Levee Breaks
|
||||
- 2.9.0 Immigrant Song
|
||||
- 2.8.0 How Many More Times
|
||||
- 2.7.0 In the Light
|
||||
- 2.6.0 Heartbreaker
|
||||
- 2.5.0 Kashmir
|
||||
- 2.4.0 Dancing Days
|
||||
- 2.3.0 Ramble On
|
||||
- 2.2.0 The Battle of Evermore
|
||||
- 2.1.0 The Song Remains the Same
|
||||
- 2.0.0 Over the Hills and Far Away
|
||||
15
.github/SECURITY.md
vendored
15
.github/SECURITY.md
vendored
@ -1,15 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Ansible applies security fixes according to the 3-versions-back support
|
||||
policy. Please find more information in [our docs](
|
||||
https://docs.ansible.com/ansible/devel/reference_appendices/release_and_maintenance.html#release-status
|
||||
).
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
We encourage responsible disclosure practices for security
|
||||
vulnerabilities. Please read our [policies for reporting bugs](
|
||||
https://docs.ansible.com/ansible/devel/community/reporting_bugs_and_features.html#reporting-a-bug
|
||||
) if you want to report a security issue that might affect Ansible.
|
||||
43
.gitignore
vendored
43
.gitignore
vendored
@ -29,20 +29,14 @@ docs/man/man3/*
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
# docsite stuff...
|
||||
docs/api/_build/
|
||||
docs/api/rst/
|
||||
docs/docsite/_build
|
||||
docs/docsite/*.html
|
||||
docs/docsite/htmlout
|
||||
docs/docsite/rst/conf.py
|
||||
docs/docsite/rst/index.rst
|
||||
docs/docsite/rst/cli/ansible-*.rst
|
||||
docs/docsite/rst/cli/ansible.rst
|
||||
docs/docsite/rst/dev_guide/collections_galaxy_meta.rst
|
||||
docs/docsite/rst/dev_guide/testing/sanity/index.rst.new
|
||||
docs/docsite/rst/dev_guide/index.rst
|
||||
docs/docsite/rst/modules/*.rst
|
||||
docs/docsite/rst/collections/*.rst
|
||||
!docs/docsite/rst/collections/all_plugins.rst
|
||||
docs/docsite/rst/collections/*/*.rst
|
||||
docs/docsite/rst/playbooks_directives.rst
|
||||
docs/docsite/rst/plugins_by_category.rst
|
||||
docs/docsite/rst/plugins/*/*.rst
|
||||
@ -53,10 +47,12 @@ docs/docsite/searchindex.js
|
||||
docs/docsite/_static/*.gif
|
||||
docs/docsite/_static/*.png
|
||||
docs/docsite/_static/websupport.js
|
||||
# deb building stuff...
|
||||
/debian/
|
||||
deb-build
|
||||
# Vim swap files
|
||||
*.swp
|
||||
*.swo
|
||||
[._]*.un~
|
||||
credentials.yml
|
||||
# test output
|
||||
*.retry
|
||||
@ -68,7 +64,6 @@ credentials.yml
|
||||
results.xml
|
||||
coverage.xml
|
||||
/test/units/cover-html
|
||||
/test/integration/inventory
|
||||
/test/integration/targets/*/backup/
|
||||
/test/cache/*
|
||||
# Development
|
||||
@ -76,27 +71,23 @@ coverage.xml
|
||||
venv
|
||||
Vagrantfile
|
||||
.vagrant
|
||||
# Backwards compatibility with `stable-2.9` and earlier branches.
|
||||
# Also used in the `devel` branch during early Ansible 2.10 development.
|
||||
/lib/ansible.egg-info/
|
||||
# First used in the `devel` branch during Ansible 2.10 development.
|
||||
/lib/ansible_base.egg-info/
|
||||
# First used in the `devel` branch during Ansible 2.11 development.
|
||||
/lib/ansible_core.egg-info/
|
||||
# vendored lib dir
|
||||
lib/ansible/_vendor/*
|
||||
!lib/ansible/_vendor/__init__.py
|
||||
# test stuff
|
||||
ansible.egg-info/
|
||||
/shippable/
|
||||
/test/integration/cloud-config-*.*
|
||||
!/test/integration/cloud-config-*.*.template
|
||||
.python-version
|
||||
/hacking/tests/selinux/*.mod
|
||||
/hacking/tests/selinux/*.pp
|
||||
# Release directory
|
||||
packaging/release/ansible_release
|
||||
/.cache/
|
||||
/test/results/
|
||||
/test/integration/cloud-config-aws.yml
|
||||
/test/results/coverage/*=coverage.*
|
||||
/test/results/coverage/coverage*
|
||||
/test/results/reports/coverage*.xml
|
||||
/test/results/reports/coverage*/
|
||||
/test/results/bot/*.json
|
||||
/test/results/junit/*.xml
|
||||
/test/results/logs/*.log
|
||||
/test/results/data/*.json
|
||||
/test/integration/inventory.remote
|
||||
/test/integration/inventory.networking
|
||||
/test/integration/inventory.winrm
|
||||
/test/integration/cloud-config-aws.yml
|
||||
@ -112,6 +103,4 @@ htmlcov/
|
||||
# ansible-test coverage results
|
||||
test/units/.coverage.*
|
||||
/test/integration/cloud-config-azure.yml
|
||||
/SYMLINK_CACHE.json
|
||||
changelogs/.plugin-cache.yaml
|
||||
.ansible-test-timeout.json
|
||||
|
||||
316
CODING_GUIDELINES.md
Normal file
316
CODING_GUIDELINES.md
Normal file
@ -0,0 +1,316 @@
|
||||
Coding Guidelines
|
||||
=================
|
||||
|
||||
Hi! Thanks for your interest in contributing to Ansible.
|
||||
|
||||
Here are some guidelines for contributing code. The purpose of this document is to establish what we're looking for in code contributions, and to make sure
|
||||
new contributors know some of the conventions that we've been using.
|
||||
|
||||
We don't think much of this should be too strange to readers familiar with contributing to Python projects, though it helps if we all get on the same page.
|
||||
|
||||
Language
|
||||
========
|
||||
|
||||
* While not all components of Ansible must be in Python, core contributions to the Ansible repo must be written in Python. This is to maximize the ability of everyone to contribute.
|
||||
* If you want to write non-Python ansible modules or inventory scripts, that's fine, but they are not going to get merged in most likely. Sorry!!
|
||||
|
||||
PEP 8 and basic style checks
|
||||
============================
|
||||
|
||||
* [PEP 8](https://www.python.org/dev/peps/pep-0008/) is a great Python style guide, which you should read.
|
||||
* PEP 8 must not be strictly followed in all aspects, but most of it is good advice.
|
||||
* The line is limited to 160 characters.
|
||||
* To run checks for things we care about, use [ansible-test](https://docs.ansible.com/ansible/dev_guide/testing_pep8.html#running-locally).
|
||||
* Similarly, additional checks can be made with "make pyflakes".
|
||||
* There is no need to submit code changes for PEP 8 and pyflakes fixes, as these break attribution history. Project leadership will make these periodically.
|
||||
* Do not submit pull requests that simply adjust whitespace in the code.
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
* Much of ansible's testing needs are in integration, not unit tests. Add module tests there.
|
||||
* That being said, there are unit tests too!
|
||||
* Code written must absolutely pass tests (i.e. "make tests")
|
||||
* You should anticipate any error paths in your code and test down those error paths.
|
||||
* Additions to tests for core code are welcome, but not always possible. Be sure things are at least well tested manually in that case.
|
||||
|
||||
Whitespace
|
||||
==========
|
||||
|
||||
* Four space indent is strictly required
|
||||
* Include meaningful whitespace between lines of code
|
||||
|
||||
Shebang Lines
|
||||
=============
|
||||
|
||||
* /usr/bin/scripts should start with '/usr/bin/env python'
|
||||
* module code should still use '/usr/bin/python' as this is replaced automatically by 'ansible_python_interpreter', see the FAQ in the docs for more info.
|
||||
|
||||
Comments
|
||||
========
|
||||
|
||||
* Readability is one of the most important goals for this project
|
||||
* Comment any non-trivial code where someone might not know why you are doing something in a particular way
|
||||
* Though if something should be commented, that's often a sign someone should write a function
|
||||
* All new functions must have a basic docstring comment
|
||||
* Commenting above a line is preferable to commenting at the end of a line
|
||||
|
||||
Classes
|
||||
=======
|
||||
|
||||
* With the exception of module code (where inline is better), it is desirable to see classes in their own files.
|
||||
* Classes should generally not cause side effects as soon as they are instantiated, move meaningful behavior to methods rather than constructors.
|
||||
|
||||
Functions and Methods
|
||||
=====================
|
||||
|
||||
* In general, functions should not be 'too long' and should describe a meaningful amount of work
|
||||
* When code gets too nested, that's usually the sign the loop body could benefit from being a function
|
||||
* Parts of our existing code are not the best examples of this at times.
|
||||
* Functions should have names that describe what they do, along with docstrings
|
||||
* Functions should be named with_underscores
|
||||
* "Don't repeat yourself" is generally a good philosophy
|
||||
|
||||
Variables
|
||||
=========
|
||||
|
||||
* Use descriptive variable names instead of variables like 'x', unless x is an obvious loop index
|
||||
* Ansible python code uses identifiers like 'ClassesLikeThis and variables_like_this
|
||||
* Module parameters should also use_underscores and not runtogether
|
||||
|
||||
Module Security
|
||||
===============
|
||||
|
||||
* Modules must take steps to avoid passing user input from the shell and always check return codes
|
||||
* always use module.run_command instead of subprocess or Popen or os.system -- this is mandatory
|
||||
* if you need to use the shell you must pass use_unsafe_shell=True to module.run_command
|
||||
* if you do not need the shell, avoid using the shell
|
||||
* any variables that can come from the user input with use_unsafe_shell=True must be wrapped by pipes.quote(x)
|
||||
* downloads of https:// resource urls must import module_utils.urls and use the fetch_url method
|
||||
|
||||
Misc Preferences
|
||||
================
|
||||
|
||||
Use the dict constructor where possible when allocating dictionaries:
|
||||
|
||||
# not this:
|
||||
foo = {
|
||||
'a' : 12,
|
||||
'b' : 34
|
||||
}
|
||||
|
||||
# this:
|
||||
foo = dict(
|
||||
a=12,
|
||||
b=34,
|
||||
)
|
||||
|
||||
Do not line up variables
|
||||
|
||||
# not this
|
||||
a = 12
|
||||
foosball = 34
|
||||
xyz = 'dog'
|
||||
|
||||
# this
|
||||
a = 12
|
||||
foosball = 34
|
||||
xyz = 'dog'
|
||||
|
||||
Don't use line continuations:
|
||||
|
||||
# no
|
||||
if (this_is_a_very_long_line and foo and \
|
||||
i_am_going_to_continue_it):
|
||||
bar()
|
||||
|
||||
# better:
|
||||
if (this_is_a_very_long_line and foo and i_am_going_to_continue_it):
|
||||
bar()
|
||||
|
||||
Spacing:
|
||||
|
||||
# no
|
||||
x = [1,2,3]
|
||||
|
||||
# no
|
||||
x = [ 1, 2, 3 ]
|
||||
|
||||
# yes
|
||||
x = [1, 2, 3]
|
||||
|
||||
Spacing continued:
|
||||
|
||||
# no
|
||||
x=foo(12)
|
||||
|
||||
# no
|
||||
x = foo( 12 )
|
||||
|
||||
# yes
|
||||
x = foo(12)
|
||||
|
||||
Licenses
|
||||
========
|
||||
|
||||
Every file should have a license header, including the copyright of the original author. Major additions to the module are allowed
|
||||
to add an additional copyright line, and this is especially true of rewrites, but original authorship copyright messages should be preserved.
|
||||
|
||||
All contributions to the core repo should preserve original licenses and new contributions must include the GPLv3 header.
|
||||
|
||||
Module Documentation
|
||||
====================
|
||||
|
||||
All module pull requests must include a DOCUMENTATION docstring (YAML format,
|
||||
see other modules for examples) as well as an EXAMPLES docstring, which is free form.
|
||||
|
||||
When adding new modules, any new parameter must have a "version_added" attribute.
|
||||
When submitting a new module, the module should have a "version_added" attribute in the
|
||||
pull request as well, set to the current development version.
|
||||
|
||||
Be sure to check grammar and spelling.
|
||||
|
||||
It's frequently the case that modules get submitted with YAML that isn't valid,
|
||||
so you can run "make webdocs" from the checkout to preview your module's documentation.
|
||||
If it fails to build, take a look at your DOCUMENTATION string
|
||||
or you might have a Python syntax error in there too.
|
||||
|
||||
Python Imports
|
||||
==============
|
||||
|
||||
To make it clear what a module is importing, imports should not be sprinkled throughout the code.
|
||||
|
||||
Python Imports should happen at the top of the file, exempting code from module_utils.
|
||||
|
||||
When a conditional runtime import is required, do so something like this instead:
|
||||
|
||||
HAS_FOO = False
|
||||
try:
|
||||
import foo
|
||||
HAS_FOO = True
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
...
|
||||
|
||||
if not HAS_FOO:
|
||||
raise Exception("the foo library is required")
|
||||
|
||||
This makes it clear what optional dependencies are but allows this to be deferred until runtime. In the case of module code, the raising of the Exception will be replaced
|
||||
with a "module.exit_json" call.
|
||||
|
||||
Exceptions
|
||||
==========
|
||||
|
||||
In the main body of the code, use typed exceptions where possible:
|
||||
|
||||
# not this
|
||||
raise Exception("panic!")
|
||||
|
||||
# this
|
||||
from ansible import errors
|
||||
...
|
||||
raise errors.AnsibleError("panic!")
|
||||
|
||||
Similarly, exception checking should be fine grained:
|
||||
|
||||
# not this
|
||||
try:
|
||||
foo()
|
||||
except:
|
||||
bar()
|
||||
|
||||
# but this
|
||||
try:
|
||||
foo()
|
||||
except SomeTypedException:
|
||||
bar()
|
||||
|
||||
List Comprehensions
|
||||
===================
|
||||
|
||||
In general list comprehensions are always preferred to map() and filter() calls.
|
||||
|
||||
However, they can be abused. Optimize for readability, and avoid nesting them too deeply.
|
||||
|
||||
Regexes
|
||||
=======
|
||||
|
||||
There is a time and place for them, but here's an illustrative joke.
|
||||
|
||||
"A developer had a problem, and used a regular expression to solve it. Now the developer had two problems".
|
||||
|
||||
Often regexes are difficult to maintain, and a trusty call to other string operations can be a great solution, faster,
|
||||
and more readable.
|
||||
|
||||
File Conventions
|
||||
================
|
||||
|
||||
If a piece of code looks for a named YAML file in a directory, it should assume it can take no extension, or an extension of '.yml' or '.yaml'.
|
||||
This should be true against all code that loads files.
|
||||
|
||||
Any code that uses directories should consider the possibility that the directory may be symlink.
|
||||
|
||||
New Ansible language parameters
|
||||
===============================
|
||||
|
||||
If adding a new parameter, like 'can_fizzbuzz: True/False' be sure the value of the parameter is templated somewhere in the Runner code, as if anything can be parameterized in Ansible,
|
||||
there is a user that will try to parameterize it.
|
||||
|
||||
String Find
|
||||
===========
|
||||
|
||||
Use 'in':
|
||||
|
||||
# not this:
|
||||
if x.find('foo') != -1:
|
||||
|
||||
# this:
|
||||
if 'foo' in x:
|
||||
|
||||
String checks
|
||||
=============
|
||||
|
||||
To test if something is a string, consider that it may be unicode.
|
||||
|
||||
# no
|
||||
if type(x) == str:
|
||||
|
||||
# yes
|
||||
from ansible.module_utils.six import string_types
|
||||
if isinstance(x, string_types):
|
||||
|
||||
Cleverness
|
||||
==========
|
||||
|
||||
Ansible's code is intended to be read by as many people as possible, so we don't particularly encourage clever or heavily idiomatic code.
|
||||
|
||||
In particular, metaclasses are probably not appropriate, however entertaining they may be to add.
|
||||
|
||||
Git Practices
|
||||
=============
|
||||
|
||||
Pull requests cannot be accepted if they contain merge commits.
|
||||
|
||||
Always do "git pull --rebase" and "git rebase" vs "git pull" or "git merge". See [rebasing a pull request](https://docs.ansible.com/ansible/latest/dev_guide/developing_rebasing.html) for more information.
|
||||
|
||||
Always create a new branch for each pull request to avoid intermingling different features or fixes on the same branch.
|
||||
|
||||
|
||||
Python Version Compliance
|
||||
=========================
|
||||
|
||||
All code in Ansible core must support a minimum version of Python 2.6.
|
||||
|
||||
Module code must support a minimum of Python 2.4, with occasional exceptions for modules that require code that themselves require 2.6 and later.
|
||||
|
||||
A quick reminder is that list comprehensions in Python 2.4 are not as fully fleshed out, there are no 'dict' comprehensions, and there is no 'with' statement.
|
||||
But otherwise it's pretty much all the same.
|
||||
|
||||
The End
|
||||
=======
|
||||
|
||||
This was not meant to be a scary document, so we hope it wasn't, but we also hope this helps you write code that is easier to maintain by others in the future.
|
||||
If you have questions about this document, please ask on the ansible-devel mailing list.
|
||||
|
||||
Thank you!
|
||||
28
CONTRIBUTING.md
Normal file
28
CONTRIBUTING.md
Normal file
@ -0,0 +1,28 @@
|
||||
# WELCOME TO ANSIBLE GITHUB
|
||||
|
||||
Hi! Nice to see you here!
|
||||
|
||||
## QUESTIONS ?
|
||||
|
||||
Please see the [community guide](https://docs.ansible.com/ansible/latest/community/index.html) for information on how to ask questions on the [mailing lists](https://docs.ansible.com/ansible/latest/community/communication.html#mailing-list-information) and IRC.
|
||||
|
||||
The GitHub issue tracker is not the best place for questions for various reasons, but both IRC and the mailing list are very helpful places for those things, as the community page explains best.
|
||||
|
||||
## CONTRIBUTING ?
|
||||
|
||||
By contributing you agree that these contributions are your own (or approved by your employer) and you grant a full, complete, irrevocable copyright license to all users and developers of the project, present and future, pursuant to the license of the project.
|
||||
|
||||
Please see the [community guide](https://docs.ansible.com/ansible/latest/community/index.html) for information regarding the contribution process. Important license agreement information is also included on that page.
|
||||
|
||||
## BUG TO REPORT ?
|
||||
|
||||
First and foremost, also check the [community guide](https://docs.ansible.com/ansible/latest/community/index.html).
|
||||
|
||||
You can report bugs or make enhancement requests at the [Ansible GitHub issue page](http://github.com/ansible/ansible/issues/new/choose) by filling out the issue template that will be presented.
|
||||
|
||||
Also please make sure you are testing on the latest released version of Ansible or the development branch. You can find the latest releases and development branch at:
|
||||
|
||||
- https://github.com/ansible/ansible/releases
|
||||
- https://github.com/ansible/ansible/archive/devel.tar.gz
|
||||
|
||||
Thanks!
|
||||
53
MANIFEST.in
53
MANIFEST.in
@ -1,51 +1,20 @@
|
||||
prune hacking
|
||||
include README.rst
|
||||
include COPYING
|
||||
include SYMLINK_CACHE.json
|
||||
include requirements.txt
|
||||
recursive-include docs *
|
||||
include docs/docsite/rst/collections/all_plugins.rst
|
||||
exclude docs/docsite/rst_warnings
|
||||
exclude docs/docsite/rst/conf.py
|
||||
exclude docs/docsite/rst/index.rst
|
||||
exclude docs/docsite/rst/dev_guide/index.rst
|
||||
exclude docs/docsite/rst/dev_guide/testing/sanity/bin-symlinks.rst
|
||||
exclude docs/docsite/rst/dev_guide/testing/sanity/botmeta.rst
|
||||
exclude docs/docsite/rst/dev_guide/testing/sanity/integration-aliases.rst
|
||||
exclude docs/docsite/rst/dev_guide/testing/sanity/release-names.rst
|
||||
recursive-exclude docs/docsite/_build *
|
||||
recursive-exclude docs/docsite/_extensions *.pyc *.pyo
|
||||
include .coveragerc
|
||||
include examples/hosts
|
||||
include examples/ansible.cfg
|
||||
include examples/scripts/ConfigureRemotingForAnsible.ps1
|
||||
include examples/scripts/upgrade_to_ps3.ps1
|
||||
include lib/ansible/keyword_desc.yml
|
||||
recursive-include lib/ansible/executor/powershell *.ps1
|
||||
recursive-include lib/ansible/module_utils/csharp *.cs
|
||||
recursive-include lib/ansible/module_utils/powershell *.psm1
|
||||
recursive-include lib/ansible/modules/windows *.ps1
|
||||
recursive-include lib/ansible/galaxy/data *.yml *.j2 README.md ansible.cfg inventory .git_keep
|
||||
recursive-include lib/ansible/config *.yml
|
||||
recursive-include licenses *.txt
|
||||
recursive-include lib/ansible/module_utils/powershell *
|
||||
recursive-include lib/ansible/modules *
|
||||
recursive-include lib/ansible/galaxy/data *
|
||||
recursive-include docs *
|
||||
recursive-include licenses *
|
||||
recursive-include packaging *
|
||||
recursive-include test/ansible_test *.py Makefile
|
||||
recursive-include test/integration *
|
||||
recursive-include test/lib/ansible_test/config *.yml *.template
|
||||
recursive-include test/lib/ansible_test/_data *.cfg *.in *.ini *.ps1 *.txt *.yml coveragerc
|
||||
recursive-include test/lib/ansible_test/_util *.cfg *.ini *.json *.ps1 *.psd1 *.py *.sh *.txt *.yml
|
||||
recursive-include test/lib/ansible_test/_util/controller/sanity/validate-modules validate-modules
|
||||
recursive-include test/sanity *.in *.json *.py *.txt
|
||||
recursive-include test/support *.py *.ps1 *.psm1 *.cs
|
||||
exclude test/sanity/code-smell/botmeta.*
|
||||
exclude test/sanity/code-smell/release-names.*
|
||||
exclude test/lib/ansible_test/_internal/commands/sanity/bin_symlinks.py
|
||||
exclude test/lib/ansible_test/_internal/commands/sanity/integration_aliases.py
|
||||
recursive-include test/units *
|
||||
recursive-include test *
|
||||
include Makefile
|
||||
include MANIFEST.in
|
||||
include changelogs/CHANGELOG*.rst
|
||||
include changelogs/changelog.yaml
|
||||
recursive-include hacking/build_library *.py
|
||||
include hacking/build-ansible.py
|
||||
include hacking/test-module.py
|
||||
include hacking/update-sanity-requirements.py
|
||||
include bin/*
|
||||
include changelogs/CHANGELOG-*.rst
|
||||
include contrib/README.md
|
||||
recursive-include contrib/inventory *
|
||||
|
||||
3
MODULE_GUIDELINES.md
Normal file
3
MODULE_GUIDELINES.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Module Maintainer Guidelines
|
||||
|
||||
The Ansible Module Maintainer Guidelines can now be found in the [official Ansible community guide](https://docs.ansible.com/ansible/latest/community/maintainers.html).
|
||||
299
Makefile
299
Makefile
@ -3,17 +3,21 @@
|
||||
# Makefile for Ansible
|
||||
#
|
||||
# useful targets:
|
||||
# make clean ---------------- clean up
|
||||
# make sdist ---------------- produce a tarball
|
||||
# make tests ---------------- run the tests (see https://docs.ansible.com/ansible/devel/dev_guide/testing_units.html for requirements)
|
||||
# make srpm ----------------- produce a SRPM
|
||||
# make rpm ----------------- produce RPMs
|
||||
# make deb-src -------------- produce a DEB source
|
||||
# make deb ------------------ produce a DEB
|
||||
# make docs ----------------- rebuild the manpages (results are checked in)
|
||||
# make tests ---------------- run the tests (see https://docs.ansible.com/ansible/dev_guide/testing_units.html for requirements)
|
||||
# make pyflakes, make pep8 -- source code checks
|
||||
|
||||
########################################################
|
||||
# variable section
|
||||
|
||||
NAME = ansible-core
|
||||
NAME = ansible
|
||||
OS = $(shell uname -s)
|
||||
PREFIX ?= '/usr/local'
|
||||
SDIST_DIR ?= 'dist'
|
||||
|
||||
# This doesn't evaluate until it's called. The -D argument is the
|
||||
# directory of the target file ($@), kinda like `dirname`.
|
||||
@ -25,9 +29,10 @@ ASCII2MAN = rst2man.py $< $@
|
||||
else
|
||||
ASCII2MAN = @echo "ERROR: rst2man from docutils command is not installed but is required to build $(MANPAGES)" && exit 1
|
||||
endif
|
||||
GENERATE_CLI = docs/bin/generate_man.py
|
||||
|
||||
PYTHON ?= python
|
||||
GENERATE_CLI = hacking/build-ansible.py generate-man
|
||||
PYTHON=python
|
||||
SITELIB = $(shell $(PYTHON) -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
|
||||
|
||||
# fetch version from project release.py as single source-of-truth
|
||||
VERSION := $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --raw || echo error)
|
||||
@ -35,8 +40,89 @@ ifeq ($(findstring error,$(VERSION)), error)
|
||||
$(error "version_helper failed")
|
||||
endif
|
||||
|
||||
MAJOR_VERSION := $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --majorversion)
|
||||
CODENAME := $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --codename)
|
||||
|
||||
# if a specific release was not requested, set to 1 (RPMs have "fancier" logic for this further down)
|
||||
RELEASE ?= 1
|
||||
|
||||
# Get the branch information from git
|
||||
ifneq ($(shell which git),)
|
||||
GIT_DATE := $(shell git log -n 1 --format="%ai")
|
||||
GIT_HASH := $(shell git log -n 1 --format="%h")
|
||||
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD | sed 's/[-_.\/]//g')
|
||||
GITINFO = .$(GIT_HASH).$(GIT_BRANCH)
|
||||
else
|
||||
GITINFO = ""
|
||||
endif
|
||||
|
||||
ifeq ($(shell echo $(OS) | egrep -c 'Darwin|FreeBSD|OpenBSD|DragonFly'),1)
|
||||
DATE := $(shell date -j -r $(shell git log -n 1 --format="%at") +%Y%m%d%H%M)
|
||||
CPUS ?= $(shell sysctl hw.ncpu|awk '{print $$2}')
|
||||
else
|
||||
DATE := $(shell date --utc --date="$(GIT_DATE)" +%Y%m%d%H%M)
|
||||
CPUS ?= $(shell nproc)
|
||||
endif
|
||||
|
||||
# DEB build parameters
|
||||
DEBUILD_BIN ?= debuild
|
||||
DEBUILD_OPTS = --source-option="-I"
|
||||
DPUT_BIN ?= dput
|
||||
DPUT_OPTS ?=
|
||||
DEB_DATE := $(shell LC_TIME=C date +"%a, %d %b %Y %T %z")
|
||||
DEB_VERSION ?= $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --debversion)
|
||||
ifeq ($(OFFICIAL),yes)
|
||||
DEB_RELEASE ?= $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --debrelease)ppa
|
||||
# Sign OFFICIAL builds using 'DEBSIGN_KEYID'
|
||||
# DEBSIGN_KEYID is required when signing
|
||||
ifneq ($(DEBSIGN_KEYID),)
|
||||
DEBUILD_OPTS += -k$(DEBSIGN_KEYID)
|
||||
endif
|
||||
else
|
||||
DEB_RELEASE ?= 100.git$(DATE)$(GITINFO)
|
||||
# Do not sign unofficial builds
|
||||
DEBUILD_OPTS += -uc -us
|
||||
DPUT_OPTS += -u
|
||||
endif
|
||||
DEBUILD = $(DEBUILD_BIN) $(DEBUILD_OPTS)
|
||||
DEB_PPA ?= ppa
|
||||
# Choose the desired Ubuntu release: lucid precise saucy trusty
|
||||
DEB_DIST ?= unstable
|
||||
|
||||
# pbuilder parameters
|
||||
PBUILDER_ARCH ?= amd64
|
||||
PBUILDER_CACHE_DIR = /var/cache/pbuilder
|
||||
PBUILDER_BIN ?= pbuilder
|
||||
PBUILDER_OPTS ?= --debootstrapopts --variant=buildd --architecture $(PBUILDER_ARCH) --debbuildopts -b
|
||||
|
||||
# RPM build parameters
|
||||
RPMSPECDIR= packaging/rpm
|
||||
RPMSPEC = $(RPMSPECDIR)/ansible.spec
|
||||
RPMDIST = $(shell rpm --eval '%{?dist}')
|
||||
|
||||
ifneq ($(OFFICIAL),yes)
|
||||
RPMRELEASE = 100.git$(DATE)$(GITINFO)
|
||||
endif
|
||||
ifeq ($(PUBLISH),nightly)
|
||||
# https://fedoraproject.org/wiki/Packaging:Versioning#Snapshots
|
||||
RPMRELEASE = $(RELEASE).$(DATE)git.$(GIT_HASH)
|
||||
endif
|
||||
|
||||
RPMVERSION ?= $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --baseversion)
|
||||
RPMRELEASE ?= $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --rpmrelease)
|
||||
RPMNVR = "$(NAME)-$(RPMVERSION)-$(RPMRELEASE)$(RPMDIST)$(REPOTAG)"
|
||||
|
||||
# MOCK build parameters
|
||||
MOCK_BIN ?= mock
|
||||
MOCK_CFG ?=
|
||||
|
||||
# dynamically add repotag define only if specified
|
||||
ifneq ($(REPOTAG),)
|
||||
EXTRA_RPM_DEFINES += --define "repotag $(REPOTAG)"
|
||||
endif
|
||||
|
||||
# ansible-test parameters
|
||||
ANSIBLE_TEST ?= bin/ansible-test
|
||||
ANSIBLE_TEST ?= test/runner/ansible-test
|
||||
TEST_FLAGS ?=
|
||||
|
||||
# ansible-test units parameters (make test / make test-py3)
|
||||
@ -60,10 +146,18 @@ tests:
|
||||
tests-py3:
|
||||
$(ANSIBLE_TEST) units -v --python $(PYTHON3_VERSION) $(TEST_FLAGS)
|
||||
|
||||
.PHONY: tests-nonet
|
||||
tests-nonet:
|
||||
$(ANSIBLE_TEST) units -v --python $(PYTHON_VERSION) $(TEST_FLAGS) --exclude test/units/modules/network/
|
||||
|
||||
.PHONY: integration
|
||||
integration:
|
||||
$(ANSIBLE_TEST) integration -v --docker $(IMAGE) $(TARGET) $(TEST_FLAGS)
|
||||
|
||||
.PHONY: authors
|
||||
authors:
|
||||
sh hacking/authors.sh
|
||||
|
||||
# Regenerate %.1.rst if %.1.rst.in has been modified more
|
||||
# recently than %.1.rst.
|
||||
%.1.rst: %.1.rst.in
|
||||
@ -75,12 +169,24 @@ integration:
|
||||
%.1: %.1.rst lib/ansible/release.py
|
||||
$(ASCII2MAN)
|
||||
|
||||
.PHONY: loc
|
||||
loc:
|
||||
sloccount lib library bin
|
||||
|
||||
.PHONY: pep8
|
||||
pep8:
|
||||
$(ANSIBLE_TEST) sanity --test pep8 --python $(PYTHON_VERSION) $(TEST_FLAGS)
|
||||
|
||||
.PHONY: pyflakes
|
||||
pyflakes:
|
||||
pyflakes lib/ansible/*.py lib/ansible/*/*.py bin/*
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
@echo "Cleaning up distutils stuff"
|
||||
rm -rf build
|
||||
rm -rf dist
|
||||
rm -rf lib/ansible*.egg-info/
|
||||
rm -rf lib/ansible.egg-info/
|
||||
@echo "Cleaning up byte compiled python stuff"
|
||||
find . -type f -regex ".*\.py[co]$$" -delete
|
||||
find . -type d -name "__pycache__" -delete
|
||||
@ -94,17 +200,24 @@ clean:
|
||||
rm -f ./docs/man/man1/*
|
||||
@echo "Cleaning up output from test runs"
|
||||
rm -rf test/test_data
|
||||
rm -rf shippable/
|
||||
rm -rf logs/
|
||||
rm -rf .cache/
|
||||
rm -f test/units/.coverage*
|
||||
rm -rf test/results/*/*
|
||||
find test/ -type f -name '*.retry' -delete
|
||||
@echo "Cleaning up symlink cache"
|
||||
rm -f SYMLINK_CACHE.json
|
||||
@echo "Cleaning up RPM building stuff"
|
||||
rm -rf MANIFEST rpm-build
|
||||
@echo "Cleaning up Debian building stuff"
|
||||
rm -rf debian
|
||||
rm -rf deb-build
|
||||
rm -rf docs/json
|
||||
rm -rf docs/js
|
||||
@echo "Cleaning up authors file"
|
||||
rm -f AUTHORS.TXT
|
||||
@echo "Cleaning up docsite"
|
||||
$(MAKE) -C docs/docsite clean
|
||||
$(MAKE) -C docs/api clean
|
||||
|
||||
.PHONY: python
|
||||
python:
|
||||
@ -118,21 +231,9 @@ install_manpages:
|
||||
gzip -9 $(wildcard ./docs/man/man1/ansible*.1)
|
||||
cp $(wildcard ./docs/man/man1/ansible*.1.gz) $(PREFIX)/man/man1/
|
||||
|
||||
.PHONY: sdist_check
|
||||
sdist_check:
|
||||
$(PYTHON) -c 'import setuptools, sys; sys.exit(int(not (tuple(map(int, setuptools.__version__.split("."))) > (39, 2, 0))))'
|
||||
$(PYTHON) packaging/sdist/check-link-behavior.py
|
||||
|
||||
.PHONY: sdist
|
||||
sdist: sdist_check clean docs
|
||||
_ANSIBLE_SDIST_FROM_MAKEFILE=1 $(PYTHON) setup.py sdist --dist-dir=$(SDIST_DIR)
|
||||
|
||||
# Official releases generate the changelog as the last commit before the release.
|
||||
# Snapshots shouldn't result in new checkins so the changelog is generated as
|
||||
# part of creating the tarball.
|
||||
.PHONY: snapshot
|
||||
snapshot: sdist_check clean docs changelog
|
||||
_ANSIBLE_SDIST_FROM_MAKEFILE=1 $(PYTHON) setup.py sdist --dist-dir=$(SDIST_DIR)
|
||||
sdist: clean docs
|
||||
$(PYTHON) setup.py sdist
|
||||
|
||||
.PHONY: sdist_upload
|
||||
sdist_upload: clean docs
|
||||
@ -140,15 +241,161 @@ sdist_upload: clean docs
|
||||
|
||||
.PHONY: changelog
|
||||
changelog:
|
||||
PYTHONPATH=./lib antsibull-changelog release -vv --use-ansible-doc && PYTHONPATH=./lib antsibull-changelog generate -vv --use-ansible-doc
|
||||
packaging/release/changelogs/changelog.py release -vv && packaging/release/changelogs/changelog.py generate -vv
|
||||
|
||||
.PHONY: rpmcommon
|
||||
rpmcommon: sdist
|
||||
@mkdir -p rpm-build
|
||||
@cp dist/*.gz rpm-build/
|
||||
@cp $(RPMSPEC) rpm-build/$(NAME).spec
|
||||
|
||||
.PHONY: mock-srpm
|
||||
mock-srpm: /etc/mock/$(MOCK_CFG).cfg rpmcommon
|
||||
$(MOCK_BIN) -r $(MOCK_CFG) $(MOCK_ARGS) --resultdir rpm-build/ --bootstrap-chroot --old-chroot --buildsrpm --spec rpm-build/$(NAME).spec --sources rpm-build/ \
|
||||
--define "rpmversion $(RPMVERSION)" \
|
||||
--define "upstream_version $(VERSION)" \
|
||||
--define "rpmrelease $(RPMRELEASE)" \
|
||||
$(EXTRA_RPM_DEFINES)
|
||||
@echo "#############################################"
|
||||
@echo "Ansible SRPM is built:"
|
||||
@echo rpm-build/*.src.rpm
|
||||
@echo "#############################################"
|
||||
|
||||
.PHONY: mock-rpm
|
||||
mock-rpm: /etc/mock/$(MOCK_CFG).cfg mock-srpm
|
||||
$(MOCK_BIN) -r $(MOCK_CFG) $(MOCK_ARGS) --resultdir rpm-build/ --bootstrap-chroot --old-chroot --rebuild rpm-build/$(NAME)-*.src.rpm \
|
||||
--define "rpmversion $(RPMVERSION)" \
|
||||
--define "upstream_version $(VERSION)" \
|
||||
--define "rpmrelease $(RPMRELEASE)" \
|
||||
$(EXTRA_RPM_DEFINES)
|
||||
@echo "#############################################"
|
||||
@echo "Ansible RPM is built:"
|
||||
@echo rpm-build/*.noarch.rpm
|
||||
@echo "#############################################"
|
||||
|
||||
.PHONY: srpm
|
||||
srpm: rpmcommon
|
||||
@rpmbuild --define "_topdir %(pwd)/rpm-build" \
|
||||
--define "_builddir %{_topdir}" \
|
||||
--define "_rpmdir %{_topdir}" \
|
||||
--define "_srcrpmdir %{_topdir}" \
|
||||
--define "_specdir $(RPMSPECDIR)" \
|
||||
--define "_sourcedir %{_topdir}" \
|
||||
--define "upstream_version $(VERSION)" \
|
||||
--define "rpmversion $(RPMVERSION)" \
|
||||
--define "rpmrelease $(RPMRELEASE)" \
|
||||
$(EXTRA_RPM_DEFINES) \
|
||||
-bs rpm-build/$(NAME).spec
|
||||
@rm -f rpm-build/$(NAME).spec
|
||||
@echo "#############################################"
|
||||
@echo "Ansible SRPM is built:"
|
||||
@echo " rpm-build/$(RPMNVR).src.rpm"
|
||||
@echo "#############################################"
|
||||
|
||||
.PHONY: rpm
|
||||
rpm: rpmcommon
|
||||
@rpmbuild --define "_topdir %(pwd)/rpm-build" \
|
||||
--define "_builddir %{_topdir}" \
|
||||
--define "_rpmdir %{_topdir}" \
|
||||
--define "_srcrpmdir %{_topdir}" \
|
||||
--define "_specdir $(RPMSPECDIR)" \
|
||||
--define "_sourcedir %{_topdir}" \
|
||||
--define "_rpmfilename $(RPMNVR).%%{ARCH}.rpm" \
|
||||
--define "__python `which $(PYTHON)`" \
|
||||
--define "upstream_version $(VERSION)" \
|
||||
--define "rpmversion $(RPMVERSION)" \
|
||||
--define "rpmrelease $(RPMRELEASE)" \
|
||||
$(EXTRA_RPM_DEFINES) \
|
||||
-ba rpm-build/$(NAME).spec
|
||||
@rm -f rpm-build/$(NAME).spec
|
||||
@echo "#############################################"
|
||||
@echo "Ansible RPM is built:"
|
||||
@echo " rpm-build/$(RPMNVR).noarch.rpm"
|
||||
@echo "#############################################"
|
||||
|
||||
.PHONY: debian
|
||||
debian: sdist
|
||||
@for DIST in $(DEB_DIST) ; do \
|
||||
mkdir -p deb-build/$${DIST} ; \
|
||||
tar -C deb-build/$${DIST} -xvf dist/$(NAME)-$(VERSION).tar.gz ; \
|
||||
cp -a packaging/debian deb-build/$${DIST}/$(NAME)-$(VERSION)/ ; \
|
||||
sed -ie "s|%VERSION%|$(DEB_VERSION)|g;s|%RELEASE%|$(DEB_RELEASE)|;s|%DIST%|$${DIST}|g;s|%DATE%|$(DEB_DATE)|g" deb-build/$${DIST}/$(NAME)-$(VERSION)/debian/changelog ; \
|
||||
done
|
||||
|
||||
.PHONY: deb
|
||||
deb: deb-src
|
||||
@for DIST in $(DEB_DIST) ; do \
|
||||
PBUILDER_OPTS="$(PBUILDER_OPTS) --distribution $${DIST} --basetgz $(PBUILDER_CACHE_DIR)/$${DIST}-$(PBUILDER_ARCH)-base.tgz --buildresult $(CURDIR)/deb-build/$${DIST}" ; \
|
||||
$(PBUILDER_BIN) create $${PBUILDER_OPTS} --othermirror "deb http://archive.ubuntu.com/ubuntu $${DIST} universe" ; \
|
||||
$(PBUILDER_BIN) update $${PBUILDER_OPTS} ; \
|
||||
$(PBUILDER_BIN) build $${PBUILDER_OPTS} deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}.dsc ; \
|
||||
done
|
||||
@echo "#############################################"
|
||||
@echo "Ansible DEB artifacts:"
|
||||
@for DIST in $(DEB_DIST) ; do \
|
||||
echo deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_amd64.changes ; \
|
||||
done
|
||||
@echo "#############################################"
|
||||
|
||||
# Build package outside of pbuilder, with locally installed dependencies.
|
||||
# Install BuildRequires as noted in packaging/debian/control.
|
||||
.PHONY: local_deb
|
||||
local_deb: debian
|
||||
@for DIST in $(DEB_DIST) ; do \
|
||||
(cd deb-build/$${DIST}/$(NAME)-$(VERSION)/ && $(DEBUILD) -b) ; \
|
||||
done
|
||||
@echo "#############################################"
|
||||
@echo "Ansible DEB artifacts:"
|
||||
@for DIST in $(DEB_DIST) ; do \
|
||||
echo deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_amd64.changes ; \
|
||||
done
|
||||
@echo "#############################################"
|
||||
|
||||
.PHONY: deb-src
|
||||
deb-src: debian
|
||||
@for DIST in $(DEB_DIST) ; do \
|
||||
(cd deb-build/$${DIST}/$(NAME)-$(VERSION)/ && $(DEBUILD) -S) ; \
|
||||
done
|
||||
@echo "#############################################"
|
||||
@echo "Ansible DEB artifacts:"
|
||||
@for DIST in $(DEB_DIST) ; do \
|
||||
echo deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_source.changes ; \
|
||||
done
|
||||
@echo "#############################################"
|
||||
|
||||
.PHONY: deb-upload
|
||||
deb-upload: deb
|
||||
@for DIST in $(DEB_DIST) ; do \
|
||||
$(DPUT_BIN) $(DPUT_OPTS) $(DEB_PPA) deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_amd64.changes ; \
|
||||
done
|
||||
|
||||
.PHONY: deb-src-upload
|
||||
deb-src-upload: deb-src
|
||||
@for DIST in $(DEB_DIST) ; do \
|
||||
$(DPUT_BIN) $(DPUT_OPTS) $(DEB_PPA) deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_source.changes ; \
|
||||
done
|
||||
|
||||
.PHONY: epub
|
||||
epub:
|
||||
(cd docs/docsite/; CPUS=$(CPUS) $(MAKE) epub)
|
||||
|
||||
# for arch or gentoo, read instructions in the appropriate 'packaging' subdirectory directory
|
||||
.PHONY: webdocs
|
||||
webdocs:
|
||||
(cd docs/docsite/; CPUS=$(CPUS) $(MAKE) docs)
|
||||
|
||||
.PHONY: generate_rst
|
||||
generate_rst: lib/ansible/cli/*.py
|
||||
mkdir -p ./docs/man/man1/ ; \
|
||||
$(PYTHON) $(GENERATE_CLI) --template-file=docs/templates/man.j2 --output-dir=docs/man/man1/ --output-format man lib/ansible/cli/*.py
|
||||
PYTHONPATH=./lib $(GENERATE_CLI) --template-file=docs/templates/man.j2 --output-dir=docs/man/man1/ --output-format man lib/ansible/cli/*.py
|
||||
|
||||
|
||||
docs: generate_rst
|
||||
$(MAKE) $(MANPAGES)
|
||||
|
||||
.PHONY: alldocs
|
||||
alldocs: docs webdocs
|
||||
|
||||
version:
|
||||
@echo $(VERSION)
|
||||
|
||||
|
||||
148
README.rst
148
README.rst
@ -1,115 +1,123 @@
|
||||
|PyPI version| |Docs badge| |Chat badge| |Build Status| |Code Of Conduct| |Mailing Lists| |License| |CII Best Practices|
|
||||
|PyPI version| |Docs badge| |Build Status|
|
||||
|
||||
*******
|
||||
Ansible
|
||||
*******
|
||||
|
||||
Ansible is a radically simple IT automation system. It handles
|
||||
configuration management, application deployment, cloud provisioning,
|
||||
ad-hoc task execution, network automation, and multi-node orchestration. Ansible makes complex
|
||||
changes like zero-downtime rolling updates with load balancers easy. More information on the Ansible `website <https://ansible.com/>`_.
|
||||
configuration-management, application deployment, cloud provisioning,
|
||||
ad-hoc task-execution, and multinode orchestration -- including
|
||||
trivializing things like zero-downtime rolling updates with load
|
||||
balancers.
|
||||
|
||||
Read the documentation and more at https://ansible.com/
|
||||
|
||||
You can find installation instructions
|
||||
`here <https://docs.ansible.com/intro_getting_started.html>`_ for a
|
||||
variety of platforms.
|
||||
|
||||
Most users should probably install a released version of Ansible from ``pip``, a package manager or
|
||||
our `release repository <https://releases.ansible.com/ansible/>`_. `Officially supported
|
||||
<https://www.ansible.com/ansible-engine>`_ builds of Ansible are also available. Some power users
|
||||
run directly from the development branch - while significant efforts are made to ensure that
|
||||
``devel`` is reasonably stable, you're more likely to encounter breaking changes when running
|
||||
Ansible this way.
|
||||
|
||||
Design Principles
|
||||
=================
|
||||
|
||||
* Have an extremely simple setup process with a minimal learning curve.
|
||||
* Manage machines quickly and in parallel.
|
||||
* Have a dead simple setup process and a minimal learning curve
|
||||
* Manage machines very quickly and in parallel
|
||||
* Avoid custom-agents and additional open ports, be agentless by
|
||||
leveraging the existing SSH daemon.
|
||||
leveraging the existing SSH daemon
|
||||
* Describe infrastructure in a language that is both machine and human
|
||||
friendly.
|
||||
* Focus on security and easy auditability/review/rewriting of content.
|
||||
friendly
|
||||
* Focus on security and easy auditability/review/rewriting of content
|
||||
* Manage new remote machines instantly, without bootstrapping any
|
||||
software.
|
||||
* Allow module development in any dynamic language, not just Python.
|
||||
* Be usable as non-root.
|
||||
software
|
||||
* Allow module development in any dynamic language, not just Python
|
||||
* Be usable as non-root
|
||||
* Be the easiest IT automation system to use, ever.
|
||||
|
||||
Use Ansible
|
||||
===========
|
||||
|
||||
You can install a released version of Ansible with ``pip`` or a package manager. See our
|
||||
`installation guide <https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html>`_ for details on installing Ansible
|
||||
on a variety of platforms.
|
||||
|
||||
Power users and developers can run the ``devel`` branch, which has the latest
|
||||
features and fixes, directly. Although it is reasonably stable, you are more likely to encounter
|
||||
breaking changes when running the ``devel`` branch. We recommend getting involved
|
||||
in the Ansible community if you want to run the ``devel`` branch.
|
||||
|
||||
Get Involved
|
||||
============
|
||||
|
||||
* Read `Community
|
||||
Information <https://docs.ansible.com/ansible/latest/community>`_ for all
|
||||
Information <https://docs.ansible.com/community.html>`_ for all
|
||||
kinds of ways to contribute to and interact with the project,
|
||||
including mailing list information and how to submit bug reports and
|
||||
code to Ansible.
|
||||
* Join a `Working Group
|
||||
<https://github.com/ansible/community/wiki>`_, an organized community devoted to a specific technology domain or platform.
|
||||
* Submit a proposed code update through a pull request to the ``devel`` branch.
|
||||
* Talk to us before making larger changes
|
||||
to avoid duplicate efforts. This not only helps everyone
|
||||
know what is going on, but it also helps save time and effort if we decide
|
||||
* All code submissions are done through pull requests. Take care to
|
||||
make sure no merge commits are in the submission, and use
|
||||
``git rebase`` vs ``git merge`` for this reason. If submitting a
|
||||
large code change (other than modules), it's probably a good idea to
|
||||
join ansible-devel and talk about what you would like to do or add
|
||||
first to avoid duplicate efforts. This not only helps everyone
|
||||
know what's going on, it also helps save time and effort if we decide
|
||||
some changes are needed.
|
||||
* For a list of email lists, IRC channels and Working Groups, see the
|
||||
`Communication page <https://docs.ansible.com/ansible/latest/community/communication.html>`_
|
||||
|
||||
Coding Guidelines
|
||||
=================
|
||||
|
||||
We document our Coding Guidelines in the `Developer Guide <https://docs.ansible.com/ansible/devel/dev_guide/>`_. We particularly suggest you review:
|
||||
|
||||
* `Contributing your module to Ansible <https://docs.ansible.com/ansible/devel/dev_guide/developing_modules_checklist.html>`_
|
||||
* `Conventions, tips, and pitfalls <https://docs.ansible.com/ansible/devel/dev_guide/developing_modules_best_practices.html>`_
|
||||
* Users list:
|
||||
`ansible-project <https://groups.google.com/group/ansible-project>`_
|
||||
* Development list:
|
||||
`ansible-devel <https://groups.google.com/group/ansible-devel>`_
|
||||
* Announcement list:
|
||||
`ansible-announce <https://groups.google.com/group/ansible-announce>`_
|
||||
-- read only
|
||||
* irc.freenode.net: #ansible
|
||||
|
||||
Branch Info
|
||||
===========
|
||||
|
||||
* The ``devel`` branch corresponds to the release actively under development.
|
||||
* The ``stable-2.X`` branches correspond to stable releases.
|
||||
* Create a branch based on ``devel`` and set up a `dev environment <https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_general.html#common-environment-setup>`_ if you want to open a PR.
|
||||
* See the `Ansible release and maintenance <https://docs.ansible.com/ansible/devel/reference_appendices/release_and_maintenance.html>`_ page for information about active branches.
|
||||
* Releases are named after Led Zeppelin songs. (Releases prior to 2.0
|
||||
were named after Van Halen songs.)
|
||||
* The devel branch corresponds to the release actively under
|
||||
development.
|
||||
* Various release-X.Y branches exist for previous releases.
|
||||
* We'd love to have your contributions, read `Community
|
||||
Information <https://docs.ansible.com/community.html>`_ for notes on
|
||||
how to get started.
|
||||
|
||||
Roadmap
|
||||
=======
|
||||
|
||||
Based on team and community feedback, an initial roadmap will be published for a major or minor version (ex: 2.7, 2.8).
|
||||
The `Ansible Roadmap page <https://docs.ansible.com/ansible/devel/roadmap/>`_ details what is planned and how to influence the roadmap.
|
||||
Based on team and community feedback, an initial roadmap will be published for a major or minor version (ex: 2.0, 2.1).
|
||||
Subminor versions will generally not have roadmaps published.
|
||||
|
||||
Ansible 2.1 was the first release which published this and asked for feedback in this manner.
|
||||
Feedback on the roadmap and the new process is quite welcome.
|
||||
The team is aiming for further transparency and better inclusion of both community desires and submissions.
|
||||
|
||||
These are the team's *best guess* roadmaps based on the Ansible team's experience and are also based on requests and feedback from the community.
|
||||
There are things that may not make it due to time constraints, lack of community maintainers, etc.
|
||||
Each roadmap is published both as an idea of what is upcoming in Ansible, and as a medium for seeking further feedback from the community.
|
||||
|
||||
There are multiple places for you to submit feedback:
|
||||
|
||||
- Add to the agenda of an IRC `Core Team Meeting <https://github.com/ansible/community/blob/master/meetings/README.md>`_ (preferred)
|
||||
- Ansible's google-group: ansible-devel
|
||||
- AnsibleFest conferences
|
||||
- IRC Freenode channel: #ansible-devel (this one may have things lost in lots of conversation)
|
||||
|
||||
For additional details consult the published `Ansible Roadmap <https://docs.ansible.com/ansible/devel/roadmap/>`_.
|
||||
|
||||
Authors
|
||||
=======
|
||||
|
||||
Ansible was created by `Michael DeHaan <https://github.com/mpdehaan>`_
|
||||
and has contributions from over 5000 users (and growing). Thanks everyone!
|
||||
(michael.dehaan/gmail/com) and has contributions from over 1000 users
|
||||
(and growing). Thanks everyone!
|
||||
|
||||
`Ansible <https://www.ansible.com>`_ is sponsored by `Red Hat, Inc.
|
||||
<https://www.redhat.com>`_
|
||||
Ansible is sponsored by `Ansible, Inc <https://ansible.com>`_
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
GNU General Public License v3.0 or later
|
||||
GNU General Public License v3.0
|
||||
|
||||
See `COPYING <COPYING>`_ to see the full text.
|
||||
|
||||
.. |PyPI version| image:: https://img.shields.io/pypi/v/ansible-core.svg
|
||||
:target: https://pypi.org/project/ansible-core
|
||||
.. |PyPI version| image:: https://img.shields.io/pypi/v/ansible.svg
|
||||
:target: https://pypi.org/project/ansible
|
||||
.. |Docs badge| image:: https://img.shields.io/badge/docs-latest-brightgreen.svg
|
||||
:target: https://docs.ansible.com/ansible/latest/
|
||||
.. |Build Status| image:: https://dev.azure.com/ansible/ansible/_apis/build/status/CI?branchName=devel
|
||||
:target: https://dev.azure.com/ansible/ansible/_build/latest?definitionId=20&branchName=devel
|
||||
.. |Chat badge| image:: https://img.shields.io/badge/chat-IRC-brightgreen.svg
|
||||
:target: https://docs.ansible.com/ansible/latest/community/communication.html
|
||||
.. |Code Of Conduct| image:: https://img.shields.io/badge/code%20of%20conduct-Ansible-silver.svg
|
||||
:target: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html
|
||||
:alt: Ansible Code of Conduct
|
||||
.. |Mailing Lists| image:: https://img.shields.io/badge/mailing%20lists-Ansible-orange.svg
|
||||
:target: https://docs.ansible.com/ansible/latest/community/communication.html#mailing-list-information
|
||||
:alt: Ansible mailing lists
|
||||
.. |License| image:: https://img.shields.io/badge/license-GPL%20v3.0-brightgreen.svg
|
||||
:target: COPYING
|
||||
:alt: Repository License
|
||||
.. |CII Best Practices| image:: https://bestpractices.coreinfrastructure.org/projects/2372/badge
|
||||
:target: https://bestpractices.coreinfrastructure.org/projects/2372
|
||||
:alt: Ansible CII Best Practices certification
|
||||
:target: https://docs.ansible.com/ansible
|
||||
.. |Build Status| image:: https://api.shippable.com/projects/573f79d02a8192902e20e34b/badge?branch=devel
|
||||
:target: https://app.shippable.com/projects/573f79d02a8192902e20e34b
|
||||
|
||||
@ -1 +0,0 @@
|
||||
../lib/ansible/cli/adhoc.py
|
||||
163
bin/ansible
Executable file
163
bin/ansible
Executable file
@ -0,0 +1,163 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
||||
#
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
########################################################
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
__requires__ = ['ansible']
|
||||
try:
|
||||
import pkg_resources
|
||||
except Exception:
|
||||
# Use pkg_resources to find the correct versions of libraries and set
|
||||
# sys.path appropriately when there are multiversion installs. But we
|
||||
# have code that better expresses the errors in the places where the code
|
||||
# is actually used (the deps are optional for many code paths) so we don't
|
||||
# want to fail here.
|
||||
pass
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
||||
from ansible.module_utils._text import to_text
|
||||
|
||||
|
||||
# Used for determining if the system is running a new enough python version
|
||||
# and should only restrict on our documented minimum versions
|
||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
||||
if not _PY_MIN:
|
||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
||||
|
||||
|
||||
class LastResort(object):
|
||||
# OUTPUT OF LAST RESORT
|
||||
def display(self, msg, log_only=None):
|
||||
print(msg, file=sys.stderr)
|
||||
|
||||
def error(self, msg, wrap_text=None):
|
||||
print(msg, file=sys.stderr)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
display = LastResort()
|
||||
|
||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
||||
import ansible.constants as C
|
||||
from ansible.utils.display import Display
|
||||
except AnsibleOptionsError as e:
|
||||
display.error(to_text(e), wrap_text=False)
|
||||
sys.exit(5)
|
||||
|
||||
cli = None
|
||||
me = os.path.basename(sys.argv[0])
|
||||
|
||||
try:
|
||||
display = Display()
|
||||
display.debug("starting run")
|
||||
|
||||
sub = None
|
||||
target = me.split('-')
|
||||
if target[-1][0].isdigit():
|
||||
# Remove any version or python version info as downstreams
|
||||
# sometimes add that
|
||||
target = target[:-1]
|
||||
|
||||
if len(target) > 1:
|
||||
sub = target[1]
|
||||
myclass = "%sCLI" % sub.capitalize()
|
||||
elif target[0] == 'ansible':
|
||||
sub = 'adhoc'
|
||||
myclass = 'AdHocCLI'
|
||||
else:
|
||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
||||
|
||||
try:
|
||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
||||
except ImportError as e:
|
||||
# ImportError members have changed in py3
|
||||
if 'msg' in dir(e):
|
||||
msg = e.msg
|
||||
else:
|
||||
msg = e.message
|
||||
if msg.endswith(' %s' % sub):
|
||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
||||
else:
|
||||
raise
|
||||
|
||||
try:
|
||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
||||
except UnicodeError:
|
||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
||||
exit_code = 6
|
||||
else:
|
||||
cli = mycli(args)
|
||||
cli.parse()
|
||||
exit_code = cli.run()
|
||||
|
||||
except AnsibleOptionsError as e:
|
||||
cli.parser.print_help()
|
||||
display.error(to_text(e), wrap_text=False)
|
||||
exit_code = 5
|
||||
except AnsibleParserError as e:
|
||||
display.error(to_text(e), wrap_text=False)
|
||||
exit_code = 4
|
||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
||||
# except AnsibleHostUnreachable as e:
|
||||
# display.error(str(e))
|
||||
# exit_code = 3
|
||||
# except AnsibleHostFailed as e:
|
||||
# display.error(str(e))
|
||||
# exit_code = 2
|
||||
except AnsibleError as e:
|
||||
display.error(to_text(e), wrap_text=False)
|
||||
exit_code = 1
|
||||
except KeyboardInterrupt:
|
||||
display.error("User interrupted execution")
|
||||
exit_code = 99
|
||||
except Exception as e:
|
||||
if C.DEFAULT_DEBUG:
|
||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
||||
# enter post mortem mode.
|
||||
raise
|
||||
have_cli_options = cli is not None and cli.options is not None
|
||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
||||
log_only = False
|
||||
if hasattr(e, 'orig_exc'):
|
||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
||||
why = to_text(e.orig_exc)
|
||||
if to_text(e) != why:
|
||||
display.vvv('\noriginal msg: %s' % why)
|
||||
else:
|
||||
display.display("to see the full traceback, use -vvv")
|
||||
log_only = True
|
||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
||||
exit_code = 250
|
||||
finally:
|
||||
# Remove ansible tmpdir
|
||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
||||
|
||||
sys.exit(exit_code)
|
||||
@ -1 +1 @@
|
||||
../lib/ansible/cli/config.py
|
||||
ansible
|
||||
@ -1 +0,0 @@
|
||||
../lib/ansible/cli/scripts/ansible_connection_cli_stub.py
|
||||
309
bin/ansible-connection
Executable file
309
bin/ansible-connection
Executable file
@ -0,0 +1,309 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright: (c) 2017, Ansible Project
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
|
||||
__metaclass__ = type
|
||||
__requires__ = ['ansible']
|
||||
|
||||
try:
|
||||
import pkg_resources
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
import fcntl
|
||||
import os
|
||||
import signal
|
||||
import socket
|
||||
import sys
|
||||
import traceback
|
||||
import errno
|
||||
import json
|
||||
|
||||
from contextlib import contextmanager
|
||||
|
||||
from ansible import constants as C
|
||||
from ansible.module_utils._text import to_bytes, to_native, to_text
|
||||
from ansible.module_utils.six import PY3
|
||||
from ansible.module_utils.six.moves import cPickle, StringIO
|
||||
from ansible.module_utils.connection import Connection, ConnectionError, send_data, recv_data
|
||||
from ansible.module_utils.service import fork_process
|
||||
from ansible.playbook.play_context import PlayContext
|
||||
from ansible.plugins.loader import connection_loader
|
||||
from ansible.utils.path import unfrackpath, makedirs_safe
|
||||
from ansible.utils.display import Display
|
||||
from ansible.utils.jsonrpc import JsonRpcServer
|
||||
|
||||
|
||||
@contextmanager
|
||||
def file_lock(lock_path):
|
||||
"""
|
||||
Uses contextmanager to create and release a file lock based on the
|
||||
given path. This allows us to create locks using `with file_lock()`
|
||||
to prevent deadlocks related to failure to unlock properly.
|
||||
"""
|
||||
|
||||
lock_fd = os.open(lock_path, os.O_RDWR | os.O_CREAT, 0o600)
|
||||
fcntl.lockf(lock_fd, fcntl.LOCK_EX)
|
||||
yield
|
||||
fcntl.lockf(lock_fd, fcntl.LOCK_UN)
|
||||
os.close(lock_fd)
|
||||
|
||||
|
||||
class ConnectionProcess(object):
|
||||
'''
|
||||
The connection process wraps around a Connection object that manages
|
||||
the connection to a remote device that persists over the playbook
|
||||
'''
|
||||
def __init__(self, fd, play_context, socket_path, original_path, ansible_playbook_pid=None):
|
||||
self.play_context = play_context
|
||||
self.socket_path = socket_path
|
||||
self.original_path = original_path
|
||||
|
||||
self.fd = fd
|
||||
self.exception = None
|
||||
|
||||
self.srv = JsonRpcServer()
|
||||
self.sock = None
|
||||
|
||||
self.connection = None
|
||||
self._ansible_playbook_pid = ansible_playbook_pid
|
||||
|
||||
def start(self, variables):
|
||||
try:
|
||||
messages = list()
|
||||
result = {}
|
||||
|
||||
messages.append('control socket path is %s' % self.socket_path)
|
||||
|
||||
# If this is a relative path (~ gets expanded later) then plug the
|
||||
# key's path on to the directory we originally came from, so we can
|
||||
# find it now that our cwd is /
|
||||
if self.play_context.private_key_file and self.play_context.private_key_file[0] not in '~/':
|
||||
self.play_context.private_key_file = os.path.join(self.original_path, self.play_context.private_key_file)
|
||||
self.connection = connection_loader.get(self.play_context.connection, self.play_context, '/dev/null',
|
||||
ansible_playbook_pid=self._ansible_playbook_pid)
|
||||
self.connection.set_options(var_options=variables)
|
||||
self.connection._connect()
|
||||
self.connection._socket_path = self.socket_path
|
||||
self.srv.register(self.connection)
|
||||
messages.extend(sys.stdout.getvalue().splitlines())
|
||||
messages.append('connection to remote device started successfully')
|
||||
|
||||
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||
self.sock.bind(self.socket_path)
|
||||
self.sock.listen(1)
|
||||
messages.append('local domain socket listeners started successfully')
|
||||
except Exception as exc:
|
||||
result['error'] = to_text(exc)
|
||||
result['exception'] = traceback.format_exc()
|
||||
finally:
|
||||
result['messages'] = messages
|
||||
self.fd.write(json.dumps(result))
|
||||
self.fd.close()
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
while self.connection.connected:
|
||||
signal.signal(signal.SIGALRM, self.connect_timeout)
|
||||
signal.signal(signal.SIGTERM, self.handler)
|
||||
signal.alarm(self.connection.get_option('persistent_connect_timeout'))
|
||||
|
||||
self.exception = None
|
||||
(s, addr) = self.sock.accept()
|
||||
signal.alarm(0)
|
||||
|
||||
signal.signal(signal.SIGALRM, self.command_timeout)
|
||||
while True:
|
||||
data = recv_data(s)
|
||||
if not data:
|
||||
break
|
||||
|
||||
signal.alarm(self.connection._play_context.timeout)
|
||||
resp = self.srv.handle_request(data)
|
||||
signal.alarm(0)
|
||||
|
||||
send_data(s, to_bytes(resp))
|
||||
|
||||
s.close()
|
||||
|
||||
except Exception as e:
|
||||
# socket.accept() will raise EINTR if the socket.close() is called
|
||||
if hasattr(e, 'errno'):
|
||||
if e.errno != errno.EINTR:
|
||||
self.exception = traceback.format_exc()
|
||||
else:
|
||||
self.exception = traceback.format_exc()
|
||||
|
||||
finally:
|
||||
# when done, close the connection properly and cleanup
|
||||
# the socket file so it can be recreated
|
||||
self.shutdown()
|
||||
|
||||
def connect_timeout(self, signum, frame):
|
||||
display.display('persistent connection idle timeout triggered, timeout value is %s secs'
|
||||
% self.connection.get_option('persistent_connect_timeout'), log_only=True)
|
||||
self.shutdown()
|
||||
|
||||
def command_timeout(self, signum, frame):
|
||||
display.display('command timeout triggered, timeout value is %s secs' % self.play_context.timeout, log_only=True)
|
||||
self.shutdown()
|
||||
|
||||
def handler(self, signum, frame):
|
||||
display.display('signal handler called with signal %s' % signum, log_only=True)
|
||||
self.shutdown()
|
||||
|
||||
def shutdown(self):
|
||||
""" Shuts down the local domain socket
|
||||
"""
|
||||
if os.path.exists(self.socket_path):
|
||||
try:
|
||||
if self.sock:
|
||||
self.sock.close()
|
||||
if self.connection:
|
||||
self.connection.close()
|
||||
except:
|
||||
pass
|
||||
finally:
|
||||
if os.path.exists(self.socket_path):
|
||||
os.remove(self.socket_path)
|
||||
setattr(self.connection, '_socket_path', None)
|
||||
setattr(self.connection, '_connected', False)
|
||||
display.display('shutdown complete', log_only=True)
|
||||
|
||||
|
||||
def main():
|
||||
""" Called to initiate the connect to the remote device
|
||||
"""
|
||||
rc = 0
|
||||
result = {}
|
||||
messages = list()
|
||||
socket_path = None
|
||||
|
||||
# Need stdin as a byte stream
|
||||
if PY3:
|
||||
stdin = sys.stdin.buffer
|
||||
else:
|
||||
stdin = sys.stdin
|
||||
|
||||
# Note: update the below log capture code after Display.display() is refactored.
|
||||
saved_stdout = sys.stdout
|
||||
sys.stdout = StringIO()
|
||||
|
||||
try:
|
||||
# read the play context data via stdin, which means depickling it
|
||||
cur_line = stdin.readline()
|
||||
init_data = b''
|
||||
|
||||
while cur_line.strip() != b'#END_INIT#':
|
||||
if cur_line == b'':
|
||||
raise Exception("EOF found before init data was complete")
|
||||
init_data += cur_line
|
||||
cur_line = stdin.readline()
|
||||
|
||||
cur_line = stdin.readline()
|
||||
vars_data = b''
|
||||
|
||||
while cur_line.strip() != b'#END_VARS#':
|
||||
if cur_line == b'':
|
||||
raise Exception("EOF found before vars data was complete")
|
||||
vars_data += cur_line
|
||||
cur_line = stdin.readline()
|
||||
|
||||
if PY3:
|
||||
pc_data = cPickle.loads(init_data, encoding='bytes')
|
||||
variables = cPickle.loads(vars_data, encoding='bytes')
|
||||
else:
|
||||
pc_data = cPickle.loads(init_data)
|
||||
variables = cPickle.loads(vars_data)
|
||||
|
||||
play_context = PlayContext()
|
||||
play_context.deserialize(pc_data)
|
||||
display.verbosity = play_context.verbosity
|
||||
|
||||
except Exception as e:
|
||||
rc = 1
|
||||
result.update({
|
||||
'error': to_text(e),
|
||||
'exception': traceback.format_exc()
|
||||
})
|
||||
|
||||
if rc == 0:
|
||||
ssh = connection_loader.get('ssh', class_only=True)
|
||||
ansible_playbook_pid = sys.argv[1]
|
||||
cp = ssh._create_control_path(play_context.remote_addr, play_context.port, play_context.remote_user, play_context.connection, ansible_playbook_pid)
|
||||
|
||||
# create the persistent connection dir if need be and create the paths
|
||||
# which we will be using later
|
||||
tmp_path = unfrackpath(C.PERSISTENT_CONTROL_PATH_DIR)
|
||||
makedirs_safe(tmp_path)
|
||||
|
||||
lock_path = unfrackpath("%s/.ansible_pc_lock_%s" % (tmp_path, play_context.remote_addr))
|
||||
socket_path = unfrackpath(cp % dict(directory=tmp_path))
|
||||
|
||||
with file_lock(lock_path):
|
||||
if not os.path.exists(socket_path):
|
||||
messages.append('local domain socket does not exist, starting it')
|
||||
original_path = os.getcwd()
|
||||
r, w = os.pipe()
|
||||
pid = fork_process()
|
||||
|
||||
if pid == 0:
|
||||
try:
|
||||
os.close(r)
|
||||
wfd = os.fdopen(w, 'w')
|
||||
process = ConnectionProcess(wfd, play_context, socket_path, original_path, ansible_playbook_pid)
|
||||
process.start(variables)
|
||||
except Exception:
|
||||
messages.append(traceback.format_exc())
|
||||
rc = 1
|
||||
|
||||
if rc == 0:
|
||||
process.run()
|
||||
|
||||
sys.exit(rc)
|
||||
|
||||
else:
|
||||
os.close(w)
|
||||
rfd = os.fdopen(r, 'r')
|
||||
data = json.loads(rfd.read())
|
||||
messages.extend(data.pop('messages'))
|
||||
result.update(data)
|
||||
|
||||
else:
|
||||
messages.append('found existing local domain socket, using it!')
|
||||
conn = Connection(socket_path)
|
||||
pc_data = to_text(init_data)
|
||||
try:
|
||||
messages.extend(conn.update_play_context(pc_data))
|
||||
except Exception as exc:
|
||||
# Only network_cli has update_play context, so missing this is
|
||||
# not fatal e.g. netconf
|
||||
if isinstance(exc, ConnectionError) and getattr(exc, 'code', None) == -32601:
|
||||
pass
|
||||
else:
|
||||
result.update({
|
||||
'error': to_text(exc),
|
||||
'exception': traceback.format_exc()
|
||||
})
|
||||
|
||||
messages.append(sys.stdout.getvalue())
|
||||
result.update({
|
||||
'messages': messages,
|
||||
'socket_path': socket_path
|
||||
})
|
||||
|
||||
sys.stdout = saved_stdout
|
||||
if 'exception' in result:
|
||||
rc = 1
|
||||
sys.stderr.write(json.dumps(result))
|
||||
else:
|
||||
rc = 0
|
||||
sys.stdout.write(json.dumps(result))
|
||||
|
||||
sys.exit(rc)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
display = Display()
|
||||
main()
|
||||
@ -1 +1 @@
|
||||
../lib/ansible/cli/console.py
|
||||
ansible
|
||||
@ -1 +1 @@
|
||||
../lib/ansible/cli/doc.py
|
||||
ansible
|
||||
@ -1 +1 @@
|
||||
../lib/ansible/cli/galaxy.py
|
||||
ansible
|
||||
@ -1 +1 @@
|
||||
../lib/ansible/cli/inventory.py
|
||||
ansible
|
||||
@ -1 +1 @@
|
||||
../lib/ansible/cli/playbook.py
|
||||
ansible
|
||||
@ -1 +1 @@
|
||||
../lib/ansible/cli/pull.py
|
||||
ansible
|
||||
@ -1 +0,0 @@
|
||||
../test/lib/ansible_test/_util/target/cli/ansible_test_cli_stub.py
|
||||
@ -1 +1 @@
|
||||
../lib/ansible/cli/vault.py
|
||||
ansible
|
||||
333
changelogs/.changes.yaml
Normal file
333
changelogs/.changes.yaml
Normal file
@ -0,0 +1,333 @@
|
||||
releases:
|
||||
2.6.0:
|
||||
codename: Heartbreaker
|
||||
fragments:
|
||||
- v2.6.0_summary.yaml
|
||||
release_date: '2018-06-28'
|
||||
2.6.0a1:
|
||||
codename: Heartbreaker
|
||||
fragments:
|
||||
- ansible-managed-encoding.yaml
|
||||
- azure-lb-sku.yaml
|
||||
- base64_filter_encoding.yaml
|
||||
- command-support-argv.yaml
|
||||
- copy-files-default-follow.yaml
|
||||
- copy-no-chmod.yaml
|
||||
- copy-recursive-copy.yml
|
||||
- encoding-docs-plugin-parsing.yaml
|
||||
- file-disallow-src.yaml
|
||||
- file-nonexistent-link.yaml
|
||||
- file-nonexitent-link-recurse.yaml
|
||||
- file-succeed-if-already-absent.yaml
|
||||
- gem-custom-home.yaml
|
||||
- grafana-deprecation-warnings.yaml
|
||||
- includes.yaml
|
||||
- mode-preserve.yaml
|
||||
- pause-ctrl-c.yaml
|
||||
- postgresql_user-encrypted-fixes.yml
|
||||
- py36-spwd.yaml
|
||||
- template-filename-encoding.yaml
|
||||
- user-expires.yaml
|
||||
- v2.6.0a1_catchup.yaml
|
||||
- v2.6.0a1_summary.yaml
|
||||
- win_environment-do-not-delete-on-null.yaml
|
||||
- win_file-special-char-fix.yaml
|
||||
- win_get_url-ftp-support.yaml
|
||||
- win_module_utils_sid-conversion.yaml
|
||||
- win_template-dest-dir-fix.yaml
|
||||
- win_updates_typo_whitelist_fix.yaml
|
||||
- window_become-better-errors.yaml
|
||||
- windows-deprecation-removal.yaml
|
||||
- winrm-encoding-fix
|
||||
- winrm-get_correct_user.yaml
|
||||
- yaml-callback-unicode.yaml
|
||||
modules:
|
||||
- aci_l3out
|
||||
- avi_autoscalelaunchconfig
|
||||
- avi_l4policyset
|
||||
- avi_useraccount
|
||||
- aws_caller_facts
|
||||
- aws_inspector_target
|
||||
- aws_ses_identity_policy
|
||||
- aws_sgw_facts
|
||||
- azure_rm_aks
|
||||
- azure_rm_aks_facts
|
||||
- bigip_data_group
|
||||
- bigip_device_license
|
||||
- bigip_gtm_global
|
||||
- bigip_gtm_monitor_bigip
|
||||
- bigip_gtm_monitor_firepass
|
||||
- bigip_gtm_monitor_http
|
||||
- bigip_gtm_monitor_https
|
||||
- bigip_gtm_monitor_tcp
|
||||
- bigip_gtm_monitor_tcp_half_open
|
||||
- bigip_gtm_pool_member
|
||||
- bigip_gtm_virtual_server
|
||||
- bigip_log_destination
|
||||
- bigip_log_publisher
|
||||
- bigip_management_route
|
||||
- bigip_profile_dns
|
||||
- bigip_profile_tcp
|
||||
- bigip_profile_udp
|
||||
- bigip_service_policy
|
||||
- bigip_smtp
|
||||
- bigip_snmp_community
|
||||
- bigip_timer_policy
|
||||
- bigip_trunk
|
||||
- bigiq_application_fasthttp
|
||||
- bigiq_application_fastl4_tcp
|
||||
- bigiq_application_fastl4_udp
|
||||
- bigiq_application_http
|
||||
- bigiq_application_https_offload
|
||||
- bigiq_application_https_waf
|
||||
- bigiq_regkey_license_assignment
|
||||
- cnos_command
|
||||
- cnos_config
|
||||
- cs_role_permission
|
||||
- digital_ocean_account_facts
|
||||
- digital_ocean_certificate_facts
|
||||
- digital_ocean_domain_facts
|
||||
- digital_ocean_image_facts
|
||||
- digital_ocean_load_balancer_facts
|
||||
- digital_ocean_region_facts
|
||||
- digital_ocean_size_facts
|
||||
- digital_ocean_snapshot_facts
|
||||
- digital_ocean_tag_facts
|
||||
- digital_ocean_volume_facts
|
||||
- ec2_eip_facts
|
||||
- ec2_vpc_vpn_facts
|
||||
- exos_command
|
||||
- fortios_webfilter
|
||||
- gcp_compute_address
|
||||
- gcp_compute_backend_bucket
|
||||
- gcp_compute_backend_service
|
||||
- gcp_compute_health_check
|
||||
- gcp_compute_http_health_check
|
||||
- gcp_compute_https_health_check
|
||||
- gcp_compute_instance
|
||||
- gcp_compute_instance_template
|
||||
- gcp_compute_network
|
||||
- gcp_compute_route
|
||||
- gcp_compute_subnetwork
|
||||
- gcp_compute_target_http_proxy
|
||||
- gcp_compute_target_https_proxy
|
||||
- gcp_compute_target_tcp_proxy
|
||||
- gcp_container_cluster
|
||||
- gcp_container_node_pool
|
||||
- gcp_dns_resource_record_set
|
||||
- gcp_pubsub_subscription
|
||||
- gcp_pubsub_topic
|
||||
- gcp_storage_bucket
|
||||
- gcp_storage_bucket_access_control
|
||||
- gitlab_deploy_key
|
||||
- gitlab_hooks
|
||||
- k8s
|
||||
- ldap_passwd
|
||||
- memset_zone
|
||||
- meraki_network
|
||||
- meraki_organization
|
||||
- na_ontap_broadcast_domain
|
||||
- net_get
|
||||
- net_put
|
||||
- netconf_get
|
||||
- one_host
|
||||
- one_image
|
||||
- one_image_facts
|
||||
- one_vm
|
||||
- os_server_metadata
|
||||
- os_volume_snapshot
|
||||
- psexec
|
||||
- purefa_ds
|
||||
- purefa_facts
|
||||
- purefa_pgsnap
|
||||
- purefb_fs
|
||||
- purefb_snap
|
||||
- rds_instance_facts
|
||||
- rds_snapshot_facts
|
||||
- scaleway_compute
|
||||
- scaleway_sshkey
|
||||
- slxos_command
|
||||
- slxos_config
|
||||
- slxos_facts
|
||||
- slxos_interface
|
||||
- slxos_l2_interface
|
||||
- slxos_linkagg
|
||||
- spectrum_device
|
||||
- sysvinit
|
||||
- vmware_cluster_facts
|
||||
- vmware_datastore_cluster
|
||||
- vmware_datastore_maintenancemode
|
||||
- vmware_guest_disk_facts
|
||||
- vmware_guest_snapshot_facts
|
||||
- vmware_host_capability_facts
|
||||
- vmware_host_powerstate
|
||||
- vmware_local_user_facts
|
||||
- vmware_portgroup_facts
|
||||
- vmware_resource_pool_facts
|
||||
- vmware_tag
|
||||
- vmware_tag_facts
|
||||
- vmware_vswitch_facts
|
||||
- win_domain_computer
|
||||
- win_hostname
|
||||
- win_pester
|
||||
- yarn
|
||||
- zabbix_group_facts
|
||||
plugins:
|
||||
callback:
|
||||
- cgroup_memory_recap
|
||||
- grafana_annotations
|
||||
- sumologic
|
||||
connection:
|
||||
- httpapi
|
||||
inventory:
|
||||
- foreman
|
||||
- generator
|
||||
- nmap
|
||||
lookup:
|
||||
- onepassword
|
||||
- onepassword_raw
|
||||
release_date: '2018-05-21'
|
||||
2.6.0a2:
|
||||
codename: Heartbreaker
|
||||
fragments:
|
||||
- always_run_removal.yaml
|
||||
- aws_ses_identity_check_mode.yaml
|
||||
- powershell_use_set_tmpdir.yaml
|
||||
- selinux-check-mode.yaml
|
||||
- synchronize_remote_is_local.yaml
|
||||
- v2.6.0a2_catchup.yaml
|
||||
- v2.6.0a2_summary.yaml
|
||||
- win_updates-add-scheduled-tasks-back.yaml
|
||||
- winrm_kinit_error-fix.yaml
|
||||
- xenserver-facts-fix.yaml
|
||||
modules:
|
||||
- acme_account
|
||||
- aws_config_aggregation_authorization
|
||||
- aws_config_aggregator
|
||||
- aws_config_delivery_channel
|
||||
- aws_config_recorder
|
||||
- aws_config_rule
|
||||
- aws_glue_connection
|
||||
- aws_glue_job
|
||||
- azure_rm_resource
|
||||
- azure_rm_resource_facts
|
||||
- bigip_gtm_monitor_external
|
||||
- bigip_monitor_external
|
||||
- bigiq_utility_license
|
||||
- cloud_init_data_facts
|
||||
- elb_network_lb
|
||||
- flatpak
|
||||
- flatpak_remote
|
||||
- gcp_compute_disk
|
||||
- gcp_compute_firewall
|
||||
- gcp_compute_forwarding_rule
|
||||
- gcp_compute_global_address
|
||||
- gcp_compute_global_forwarding_rule
|
||||
- gcp_compute_image
|
||||
- gcp_compute_instance_group
|
||||
- gcp_compute_instance_group_manager
|
||||
- gcp_compute_ssl_certificate
|
||||
- gcp_compute_target_pool
|
||||
- gcp_compute_target_ssl_proxy
|
||||
- gcp_compute_url_map
|
||||
- gluster_peer
|
||||
- heroku_collaborator
|
||||
- memset_dns_reload
|
||||
- memset_zone_domain
|
||||
- memset_zone_record
|
||||
- meraki_admin
|
||||
- meraki_snmp
|
||||
- na_ontap_aggregate
|
||||
- na_ontap_broadcast_domain_ports
|
||||
- na_ontap_cifs
|
||||
- na_ontap_cifs_acl
|
||||
- na_ontap_cifs_server
|
||||
- na_ontap_cluster
|
||||
- na_ontap_cluster_ha
|
||||
- na_ontap_export_policy
|
||||
- na_ontap_export_policy_rule
|
||||
- na_ontap_igroup
|
||||
- na_ontap_interface
|
||||
- na_ontap_iscsi
|
||||
- na_ontap_job_schedule
|
||||
- na_ontap_license
|
||||
- na_ontap_lun
|
||||
- na_ontap_lun_map
|
||||
- na_ontap_net_ifgrp
|
||||
- na_ontap_net_port
|
||||
- na_ontap_net_routes
|
||||
- na_ontap_net_vlan
|
||||
- na_ontap_nfs
|
||||
- na_ontap_ntp
|
||||
- na_ontap_qtree
|
||||
- na_ontap_service_processor_network
|
||||
- na_ontap_snapshot
|
||||
- na_ontap_snmp
|
||||
- na_ontap_svm
|
||||
- na_ontap_ucadapter
|
||||
- na_ontap_user
|
||||
- na_ontap_user_role
|
||||
- na_ontap_volume
|
||||
- na_ontap_volume_clone
|
||||
- netconf_rpc
|
||||
- one_service
|
||||
- slxos_l3_interface
|
||||
- slxos_vlan
|
||||
plugins:
|
||||
inventory:
|
||||
- gcp_compute
|
||||
release_date: '2018-05-30'
|
||||
2.6.0rc1:
|
||||
codename: Heartbreaker
|
||||
fragments:
|
||||
- v2.6.0rc1_catchup.yaml
|
||||
- v2.6.0rc1_summary.yaml
|
||||
release_date: '2018-06-05'
|
||||
2.6.0rc2:
|
||||
codename: Heartbreaker
|
||||
fragments:
|
||||
- 41167_ansible_doc_regression.yaml
|
||||
- admin-users-default-change.yaml
|
||||
- aws_s3_async_fix.yaml
|
||||
- aws_s3_decryption_fix.yaml
|
||||
- aws_s3_fix_custom_endpoints.yaml
|
||||
- aws_s3_fix_exception_handling.yaml
|
||||
- ec2_ami_fix_block_device_mapping_volume_size_type.yaml
|
||||
- v2.6.0rc2_summary.yaml
|
||||
release_date: '2018-06-08'
|
||||
2.6.0rc3:
|
||||
codename: Heartbreaker
|
||||
fragments:
|
||||
- digital_ocean_block_storage_fix.yaml
|
||||
- gce-sort-fix.yaml
|
||||
- iosxr_config_route_policy_objects_fix.yaml
|
||||
- no_log_fix_for_connection_exceptions.yaml
|
||||
- reset_con_fix.yml
|
||||
- v2.6.0rc3_summary.yaml
|
||||
release_date: '2018-06-18'
|
||||
2.6.0rc4:
|
||||
codename: Heartbreaker
|
||||
fragments:
|
||||
- 41530-apt-mark-deb6.yaml
|
||||
- debug_fixes.yml
|
||||
- eos_vrf_failure-fix.yml
|
||||
- file_touch_diff.yaml
|
||||
- fix_config_required.yml
|
||||
- fix_yaml_inv_nulls.yml
|
||||
- missing_raise.yml
|
||||
- v2.6.0rc4_summary.yaml
|
||||
- vars_lk.yml
|
||||
- virtualbox_inventory.yaml
|
||||
- win_updates-async-fix.yml
|
||||
- winrm_kinit-remove-pass-log.yml
|
||||
release_date: '2018-06-25'
|
||||
2.6.0rc5:
|
||||
codename: Heartbreaker
|
||||
fragments:
|
||||
- fix_options.yml
|
||||
- fix_password_lookup_loading.yaml
|
||||
- group_by_localhost.yaml
|
||||
- lineinfile-insertbefore-bof-bugfix.yaml
|
||||
- v2.6.0rc5_summary.yaml
|
||||
- win_iis_webapppool-output-fix.yml
|
||||
release_date: '2018-06-26'
|
||||
@ -1,501 +0,0 @@
|
||||
=========================================================
|
||||
ansible-core 2.13 "Nobody's Fault but Mine" Release Notes
|
||||
=========================================================
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
|
||||
v2.13.4rc1
|
||||
==========
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
| Release Date: 2022-09-06
|
||||
| `Porting Guide <https://docs.ansible.com/ansible/devel/porting_guides.html>`__
|
||||
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fix for network_cli not getting all relevant connection options
|
||||
- ansible-galaxy - Fix detection of ``--role-file`` in arguments for implicit role invocation (https://github.com/ansible/ansible/issues/78204)
|
||||
- ansible-galaxy - Fix exit codes for role search and delete (https://github.com/ansible/ansible/issues/78516)
|
||||
- ansible-test - Fix change detection for ansible-test's own integration tests.
|
||||
- ansible-test - ansible-doc sanity test - Correctly determine the fully-qualified collection name for plugins in subdirectories, resolving https://github.com/ansible/ansible/issues/78490.
|
||||
- apt - don't actually update the cache in check mode with update_cache=true.
|
||||
- apt - don't mark existing packages as manually installed in check mode (https://github.com/ansible/ansible/issues/66413).
|
||||
- apt - fix package selection to include /etc/apt/preferences(.d) (https://github.com/ansible/ansible/issues/77969)
|
||||
- urls - Guard imports of ``urllib3`` by catching ``Exception`` instead of ``ImportError`` to prevent exceptions in the import process of optional dependencies from preventing use of ``urls.py`` (https://github.com/ansible/ansible/issues/78648)
|
||||
- wait_for - Read file and perform comparisons using bytes to avoid decode errors (https://github.com/ansible/ansible/issues/78214)
|
||||
|
||||
v2.13.3
|
||||
=======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
| Release Date: 2022-08-15
|
||||
| `Porting Guide <https://docs.ansible.com/ansible/devel/porting_guides.html>`__
|
||||
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Avoid 'unreachable' error when chmod on AIX has 255 as return code.
|
||||
- Fix PluginLoader to mimic Python import machinery by adding module to sys.modules before exec
|
||||
- Fix dnf module documentation to indicate that comparison operators for package version require spaces around them (https://github.com/ansible/ansible/issues/78295)
|
||||
- ansible-connection - decrypt vaulted parameters before sending over the socket, as vault secrets are not available on the other side.
|
||||
- ansible-galaxy - Fix reinitializing the whole collection directory with ``ansible-galaxy collection init ns.coll --force``. Now directories and files that are not included in the collection skeleton will be removed.
|
||||
- ansible-galaxy - do not require mandatory keys in the ``galaxy.yml`` of source collections when listing them (https://github.com/ansible/ansible/issues/70180).
|
||||
- ansible-galaxy - fix listing collections that contains metadata but the namespace or name are not strings.
|
||||
- ansible-galaxy - fix setting the cache for paginated responses from Galaxy NG/AH (https://github.com/ansible/ansible/issues/77911).
|
||||
- ansible-test - Delegation for commands which generate output for programmatic consumption no longer redirect all output to stdout. The affected commands and options are ``shell``, ``sanity --lint``, ``sanity --list-tests``, ``integration --list-targets``, ``coverage analyze``
|
||||
- ansible-test - Delegation now properly handles arguments given after ``--`` on the command line.
|
||||
- ansible-test - Test configuration for collections is now parsed only once, prior to delegation. Fixes issue: https://github.com/ansible/ansible/issues/78334
|
||||
- ansible-test - The ``shell`` command no longer redirects all output to stdout when running a provided command. Any command output written to stderr will be mixed with the stderr output from ansible-test.
|
||||
- ansible-test - The ``shell`` command no longer requests a TTY when using delegation unless an interactive shell is being used. An interactive shell is the default behavior when no command is given to pass to the shell.
|
||||
- dnf - fix output parsing on systems with ``LANGUAGE`` set to a language other than English (https://github.com/ansible/ansible/issues/78193)
|
||||
- if a config setting prevents running ansible it should at least show it's "origin".
|
||||
- prevent type annotation shim failures from causing runtime failures (https://github.com/ansible/ansible/pull/77860)
|
||||
- template module/lookup - fix ``convert_data`` option that was effectively always set to True for Jinja macros (https://github.com/ansible/ansible/issues/78141)
|
||||
- uri - properly use uri parameter use_proxy (https://github.com/ansible/ansible/issues/58632)
|
||||
- yum - fix traceback when ``releasever`` is specified with ``latest`` (https://github.com/ansible/ansible/issues/78058)
|
||||
|
||||
v2.13.2
|
||||
=======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
| Release Date: 2022-07-18
|
||||
| `Porting Guide <https://docs.ansible.com/ansible/devel/porting_guides.html>`__
|
||||
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- ansible-test - An improved error message is shown when the download of a pip bootstrap script fails. The download now uses ``urllib2`` instead of ``urllib`` on Python 2.
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Move undefined check from concat to finalize (https://github.com/ansible/ansible/issues/78156)
|
||||
- ansible-doc - no longer list module and plugin aliases that are created with symlinks (https://github.com/ansible/ansible/pull/78137).
|
||||
- ansible-doc - when listing modules in collections, proceed recursively. This fixes module listing for community.general 5.x.y and community.network 4.x.y (https://github.com/ansible/ansible/pull/78137).
|
||||
- ansible-doc will not add 'website for' in ":ref:" substitutions as it made them confusing.
|
||||
- file backed cache plugins now handle concurrent access by making atomic updates to the files.
|
||||
- password lookup does not ignore k=v arguments anymore.
|
||||
- user - Fix error "Permission denied" in user module while generating SSH keys (https://github.com/ansible/ansible/issues/78017).
|
||||
|
||||
v2.13.1
|
||||
=======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
| Release Date: 2022-06-20
|
||||
| `Porting Guide <https://docs.ansible.com/ansible/devel/porting_guides.html>`__
|
||||
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add an 'action_plugin' field for modules in runtime.yml plugin_routing.
|
||||
|
||||
This fixes module_defaults by supporting modules-as-redirected-actions
|
||||
without redirecting module_defaults entries to the common action.
|
||||
|
||||
.. code: yaml
|
||||
|
||||
plugin_routing:
|
||||
action:
|
||||
facts:
|
||||
redirect: ns.coll.eos
|
||||
command:
|
||||
redirect: ns.coll.eos
|
||||
modules:
|
||||
facts:
|
||||
redirect: ns.coll.eos_facts
|
||||
command:
|
||||
redirect: ns.coll.eos_command
|
||||
|
||||
With the runtime.yml above for ns.coll, a task such as
|
||||
|
||||
.. code: yaml
|
||||
|
||||
- hosts: all
|
||||
module_defaults:
|
||||
ns.coll.eos_facts: {'valid_for_eos_facts': 'value'}
|
||||
ns.coll.eos_command: {'not_valid_for_eos_facts': 'value'}
|
||||
tasks:
|
||||
- ns.coll.facts:
|
||||
|
||||
will end up with defaults for eos_facts and eos_command
|
||||
since both modules redirect to the same action.
|
||||
|
||||
To select an action plugin for a module without merging
|
||||
module_defaults, define an action_plugin field for the resolved
|
||||
module in the runtime.yml.
|
||||
|
||||
.. code: yaml
|
||||
|
||||
plugin_routing:
|
||||
modules:
|
||||
facts:
|
||||
redirect: ns.coll.eos_facts
|
||||
action_plugin: ns.coll.eos
|
||||
command:
|
||||
redirect: ns.coll.eos_command
|
||||
action_plugin: ns.coll.eos
|
||||
|
||||
The action_plugin field can be a redirected action plugin, as
|
||||
it is resolved normally.
|
||||
|
||||
Using the modified runtime.yml, the example task will only use
|
||||
the ns.coll.eos_facts defaults.
|
||||
- ansible-galaxy - Support resolvelib versions 0.6.x, 0.7.x, and 0.8.x. The full range of supported versions is now >= 0.5.3, < 0.9.0.
|
||||
- ansible-test - Add RHEL 9.0 remote support.
|
||||
- ansible-test - Add support for Ubuntu VMs using the ``--remote`` option.
|
||||
- ansible-test - Add support for exporting inventory with ``ansible-test shell --export {path}``.
|
||||
- ansible-test - Add support for multi-arch remotes.
|
||||
- ansible-test - Add support for running non-interactive commands with ``ansible-test shell``.
|
||||
- ansible-test - Avoid using the ``mock_use_standalone_module`` setting for unit tests running on Python 3.8 or later.
|
||||
- ansible-test - Blocking mode is now enforced for stdin, stdout and stderr. If any of these are non-blocking then ansible-test will exit during startup with an error.
|
||||
- ansible-test - Improve consistency of output messages by using stdout or stderr for most output, but not both.
|
||||
- ansible-test - The ``shell`` command can be used outside a collection if no controller delegation is required.
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Add PyYAML >= 5.1 as a dependency of ansible-core to be compatible with Python 3.8+.
|
||||
- ansible-config dump - Only display plugin type headers when plugin options are changed if --only-changed is specified.
|
||||
- ansible-galaxy - handle unsupported versions of resolvelib gracefully.
|
||||
- ansible-test - Fix internal validation of remote completion configuration.
|
||||
- ansible-test - Prevent ``--target-`` prefixed options for the ``shell`` command from being combined with legacy environment options.
|
||||
- ansible-test - Sanity test output with the ``--lint`` option is no longer mixed in with bootstrapping output.
|
||||
- ansible-test - Subprocesses are now isolated from the stdin, stdout and stderr of ansible-test. This avoids issues with subprocesses tampering with the file descriptors, such as SSH making them non-blocking. As a result of this change, subprocess output from unit and integration tests on stderr now go to stdout.
|
||||
- ansible-test - Subprocesses no longer have access to the TTY ansible-test is connected to, if any. This maintains consistent behavior between local testing and CI systems, which typically do not provide a TTY. Tests which require a TTY should use pexpect or another mechanism to create a PTY.
|
||||
- apt module now correctly handles virtual packages.
|
||||
- lookup plugin - catch KeyError when lookup returns dictionary (https://github.com/ansible/ansible/pull/77789).
|
||||
- pip - fix cases where resolution of pip Python module fails when importlib.util has not already been imported
|
||||
- plugin loader - Sort results when fuzzy matching plugin names (https://github.com/ansible/ansible/issues/77966).
|
||||
- plugin loader will now load config data for plugin by name instead of by file to avoid issues with the same file being loaded under different names (fqcn + short name).
|
||||
- psrp connection now handles default to inventory_hostname correctly.
|
||||
- winrm connection now handles default to inventory_hostname correctly.
|
||||
|
||||
v2.13.0
|
||||
=======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
| Release Date: 2022-05-16
|
||||
| `Porting Guide <https://docs.ansible.com/ansible/devel/porting_guides.html>`__
|
||||
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Jinja2 Controller Requirement - Jinja2 3.0.0 or newer is required for the control node (the machine that runs Ansible) (https://github.com/ansible/ansible/pull/75881)
|
||||
- Templating - remove ``safe_eval`` in favor of using ``NativeEnvironment`` but utilizing ``literal_eval`` only in cases when ``safe_eval`` was used (https://github.com/ansible/ansible/pull/75587)
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Action Plugins - Add helper method for argument spec validation, and extend to pause and async_wrapper
|
||||
- Added AIX root CA certs folders - enhance the TLS support in ``uri`` task on AIX
|
||||
- Added ``module_utils.compat.typing`` to facilitate type-hinting on all supported Python versions.
|
||||
- Ansible.Basic - small changes to allow use in PowerShell modules running on non-Windows platforms (https://github.com/ansible/ansible/pull/76924).
|
||||
- AnsibleModule.run_command() now has a toggle to allow caller to decide to handle exceptions from executing the command itself
|
||||
- Attach concat function to an environment class (https://github.com/ansible/ansible/pull/76282)
|
||||
- Clarify in a comment that unrolling an iterator in ``Templar._finalize`` is actually necessary. Also switch to using the ``_unroll_iterator`` decorator directly to deduplicate code in ``Templar._finalize``. (https://github.com/ansible/ansible/pull/76436)
|
||||
- Installation - modernize our python installation, to reduce dynamic code in setup.py, and migrate what is feasible to setup.cfg. This will enable shipping wheels in the future.
|
||||
- PlayIterator - introduce public methods to access ``PlayIterator._host_states`` (https://github.com/ansible/ansible/pull/74416)
|
||||
- PlayIterator - use enums for Iterating and Failed states (https://github.com/ansible/ansible/pull/74511)
|
||||
- Reduce number of iterations through PlayIterator (https://github.com/ansible/ansible/pull/74175)
|
||||
- Remove more Python 2.x compatibility code from controller (https://github.com/ansible/ansible/pull/77320).
|
||||
- Start of moving away from using Six, Python 2 and 3 compatibility library (https://github.com/ansible/ansible/pull/75863)
|
||||
- The collection loader now reports a Python warning if an attempt is made to install the Ansible collection loader a second time. Previously this condition was reported using an Ansible warning.
|
||||
- ``ansible-galaxy collection [install|verify]`` - allow user-provided signature sources in addition to those from the Galaxy server. Each collection entry in a requirements file can specify a ``signatures`` key followed by a list of sources. Collection name(s) provided on the CLI can specify additional signature sources by using the ``--signatures`` CLI option. Signature sources should be URIs that can be opened with ``urllib.request.urlopen()``, such as "https://example.com/path/to/detached_signature.asc" or "file:///path/to/detached_signature.asc". The ``--keyring`` option must be specified if signature sources are provided.
|
||||
- ``ansible-galaxy collection [install|verify]`` - use gpg to verify the authenticity of the signed ``MANIFEST.json`` with ASCII armored detached signatures provided by the Galaxy server. The keyring (which is not managed by ``ansible-galaxy``) must be provided with the ``--keyring`` option to use signature verification. If no ``--keyring`` is specified and the collection to ``install|verify`` has associated detached signatures on the Galaxy server, a warning is provided.
|
||||
- ``ansible-galaxy collection install`` - Add a global configuration to modify the required number of signatures that must verify the authenticity of the collection. By default, the number of required successful signatures is 1. Set this option to ``all`` to require all signatures verify the collection. To ensure signature verification fails if there are no valid signatures, prepend the value with '+', such as ``+all`` or ``+1``.
|
||||
- ``ansible-galaxy collection install`` - Add a global ignore list for gpg signature errors. This can be used to ignore certain signatures when the number of required successful signatures is all. When the required number of successful signatures is a positive integer, the only effect this has is to display fewer errors to the user on failure (success is determined by having the minimum number of successful signatures, in which case all errors are disregarded).
|
||||
- ``ansible-galaxy collection install`` - Add a global toggle to turn off GPG signature verification.
|
||||
- ``ansible-galaxy collection install`` - Store Galaxy server metadata alongside installed collections for provenance. Signatures obtained from the Galaxy server can be used for offline verification with ``ansible-galaxy collection verify --offline``.
|
||||
- ansible-console - Provide a way to customize the stdout callback
|
||||
- ansible-core modules - Remove unused Python shebangs from built-in modules.
|
||||
- ansible-doc metadata dump - add option ``--no-fail-on-errors`` which allows to not fail the ansible-doc invocation when errors happen during docs parsing or processing. Instead they are reported in the JSON result in an ``error`` key for the affected plugins (https://github.com/ansible/ansible/pull/77035).
|
||||
- ansible-galaxy - the option to skip certificate verification now also applies when cloning via SCM (git/hg) (https://github.com/ansible/ansible/issues/41077)
|
||||
- ansible-test - Accept new-style Python modules without a shebang.
|
||||
- ansible-test - Add ``--version`` support to show the ansible-core version.
|
||||
- ansible-test - Add support for ``rhel/8.5`` remote instances.
|
||||
- ansible-test - Add support for remote testing of FreeBSD 12.3.
|
||||
- ansible-test - Add support for running container tests with ``podman remote`` (https://github.com/ansible/ansible/pull/75753)
|
||||
- ansible-test - Added the ``fedora35`` test container.
|
||||
- ansible-test - Change the maximum number of open files in a test container from the default to ``10240``.
|
||||
- ansible-test - Declare public dependencies of ansible-core and use to limit unguarded imports in plugins.
|
||||
- ansible-test - Importing ``distutils`` now results in an error.
|
||||
- ansible-test - Installation of ``cryptography`` is no longer version constrained when ``openssl`` 1.1.0 or later is installed.
|
||||
- ansible-test - Miscellaneous code cleanup and type hint fixes.
|
||||
- ansible-test - PowerShell in the ``base`` and ``default`` containers has been upgraded to version 7.1.4.
|
||||
- ansible-test - Remove RHEL 8.4 remote (``rhel/8.4``) support.
|
||||
- ansible-test - Remove ``idna`` constraint.
|
||||
- ansible-test - Remove obsolete ``MAXFD`` display.
|
||||
- ansible-test - Remove obsolete constraints for Python 2.6.
|
||||
- ansible-test - Remove support for FreeBSD 12.2 remote provisioning.
|
||||
- ansible-test - Remove support for macOS 11.1 remote provisioning.
|
||||
- ansible-test - Remove support for provisioning remote AIX instances.
|
||||
- ansible-test - Remove the ``centos8`` test container since CentOS 8 will reach end-of-life soon.
|
||||
- ansible-test - Remove the ``fedora33`` test container since Fedora 33 will reach end-of-life soon.
|
||||
- ansible-test - Remove unused Python 2.x compatibility code.
|
||||
- ansible-test - Removed support for Sherlock from the Azure provisioning plugin.
|
||||
- ansible-test - Removed used ``MarkupSafe`` constraint for Python 3.5 and earlier.
|
||||
- ansible-test - Requirements for the plugin import test are now frozen.
|
||||
- ansible-test - Shellcheck in the ``base`` and ``default`` containers has been upgraded to version 0.7.0.
|
||||
- ansible-test - Stop early with an error if the current working directory contains an invalid collection namespace or name.
|
||||
- ansible-test - The ``--help`` option is now available when an unsupported cwd is in use.
|
||||
- ansible-test - The ``--help`` output now shows the same instructions about cwd as would be shown in error messages if the cwd is unsupported.
|
||||
- ansible-test - The ``pip`` and ``wheel`` packages are removed from all sanity test virtual environments after installation completes to reduce their size. Previously they were only removed from the environments used for the ``import`` sanity test.
|
||||
- ansible-test - The explanation about cwd usage has been improved to explain more clearly what is required.
|
||||
- ansible-test - The hash for all managed sanity test virtual environments has changed. Containers that include ``ansible-test sanity --prime-venvs`` will need to be rebuilt to continue using primed virtual environments.
|
||||
- ansible-test - Update ``base`` container to version 2.1.0.
|
||||
- ansible-test - Update ``base`` container to version 2.2.0.
|
||||
- ansible-test - Update ``default`` containers to version 5.2.0.
|
||||
- ansible-test - Update ``default`` containers to version 5.4.0.
|
||||
- ansible-test - Update ``default`` containers to version 5.5.0.
|
||||
- ansible-test - Update ``default`` containers to version 5.6.2.
|
||||
- ansible-test - Update ``default`` containers to version 5.7.0.
|
||||
- ansible-test - Update ``default`` containers to version 5.8.0.
|
||||
- ansible-test - Update ``default`` containers to version 5.9.0.
|
||||
- ansible-test - Update ``pip`` used to bootstrap remote FreeBSD instances from version 20.3.4 to 21.3.1.
|
||||
- ansible-test - Update sanity test requirements.
|
||||
- ansible-test - Update the NIOS test plugin container to version 1.4.0.
|
||||
- ansible-test - Update the ``alpine`` container to version 3.3.0. This updates the base image from 3.14.2 to 3.15.0, which includes support for installing binary wheels using pip.
|
||||
- ansible-test - Update the ``base`` and ``default`` containers from Python 3.10.0rc2 to 3.10.0.
|
||||
- ansible-test - Update the ``base`` and ``default`` containers from a Ubuntu 18.04 to Ubuntu 20.04 base image.
|
||||
- ansible-test - Update the ``default`` containers to version 5.1.0.
|
||||
- ansible-test - Update the ``galaxy`` test plugin to get its container from a copy on quay.io.
|
||||
- ansible-test - Update the ``openshift`` test plugin to get its container from a copy on quay.io.
|
||||
- ansible-test - Use Python 3.10 as the default Python version for the ``base`` and ``default`` containers.
|
||||
- ansible-test - add macOS 12.0 as a remote target (https://github.com/ansible/ansible/pull/76328)
|
||||
- ansible-test - handle JSON decode error gracefully in podman environment.
|
||||
- ansible-test pslint - Added the `AvoidLongLines <https://github.com/PowerShell/PSScriptAnalyzer/blob/master/docs/Rules/AvoidLongLines.md>`_ rule set to a length of 160.
|
||||
- ansible-test pslint - Added the `PlaceCloseBrace <https://github.com/PowerShell/PSScriptAnalyzer/blob/master/docs/Rules/PlaceCloseBrace.md>`_ rule set to enforce close braces on a newline.
|
||||
- ansible-test pslint - Added the `PlaceOpenBrace <https://github.com/PowerShell/PSScriptAnalyzer/blob/master/docs/Rules/PlaceOpenBrace.md>`_ rule set to enforce open braces on the same line and a subsequent newline.
|
||||
- ansible-test pslint - Added the `UseConsistentIndentation <https://github.com/PowerShell/PSScriptAnalyzer/blob/master/docs/Rules/UseConsistentIndentation.md>`_ rule to enforce indentation is done with 4 spaces.
|
||||
- ansible-test pslint - Added the `UseConsistentWhitespace <https://github.com/PowerShell/PSScriptAnalyzer/blob/master/docs/Rules/UseConsistentWhitespace.md>`_ rule to enforce whitespace consistency in PowerShell.
|
||||
- ansible-test pslint - Updated ``PowerShellScriptAnalyzer`` to 1.20.0
|
||||
- ansible-test sanity validate-modules - the validate-modules sanity test now also checks the documentation of documentable plugin types (https://github.com/ansible/ansible/pull/71734).
|
||||
- ansible-test validate-modules sanity test - add more schema checks to improve quality of plugin documentation (https://github.com/ansible/ansible/pull/77268).
|
||||
- ansible-test validate_modules - allow ``choices`` for return values (https://github.com/ansible/ansible/pull/76009).
|
||||
- apt - Add support for using ">=" in package version number matching.
|
||||
- apt - Adds APT option ``--allow-change-held-packages`` as module parameter ``allow_change_held_packages`` to allow APT up- or downgrading a package which is on APTs hold list (https://github.com/ansible/ansible/issues/65325)
|
||||
- auto inventory plugin will now give plugin loading information on verbose output
|
||||
- callbacks - Add result serialization format options to ``_dump_results`` allowing plugins such as the ``default`` callback to emit ``YAML`` serialized task results in addition to ``JSON``
|
||||
- dnf - add more specific error message for GPG validation (https://github.com/ansible/ansible/issues/76192)
|
||||
- env lookup, add default option
|
||||
- facts - report prefix length for IPv4 addresses in Linux network facts.
|
||||
- get_parsable_locale now logs result when in debug mode.
|
||||
- git - display the destination directory path in error msg when local_mods detects local modifications conflict so that users see the exact location
|
||||
- iptables - add the ``chain_management`` parameter that controls iptables chain creation and deletion
|
||||
- jinja2_native - keep same behavior on Python 3.10.
|
||||
- junit callback - Add support for replacing the directory portion of out-of-tree relative task paths with a placeholder.
|
||||
- k8s - scenario guides for kubernetes migrated to ``kubernetes.core`` collection.
|
||||
- module_utils.distro - Add missing ``typing`` import from original code.
|
||||
- package_facts - add pkg_info support for OpenBSD and NetBSD (https://github.com/ansible/ansible/pull/76580)
|
||||
- services_facts - Add support for openrc (https://github.com/ansible/ansible/pull/76373).
|
||||
- setting DEFAULT_FACT_PATH is being deprecated in favor of the generic module_defaults keyword
|
||||
- uri - Avoid reading the response body when not needed
|
||||
- uri - Eliminate multiple requests to determine the final URL for file naming with ``dest``
|
||||
- validate-modules - do some basic validation on the ``M(...)``, ``U(...)``, ``L(..., ...)`` and ``R(..., ...)`` documentation markups (https://github.com/ansible/ansible/pull/76262).
|
||||
- vmware - migrated vmware scenario guides to `community.vmware` repo.
|
||||
- yum, dnf - add sslverify option to temporarily disable certificate validation for a repository
|
||||
|
||||
Breaking Changes / Porting Guide
|
||||
--------------------------------
|
||||
|
||||
- Module Python Dependency - Drop support for Python 2.6 in module execution.
|
||||
- Templating - it is no longer allowed to perform arithmetic and concatenation operations outside of the jinja template (https://github.com/ansible/ansible/pull/75587)
|
||||
- The ``finalize`` method is no longer exposed in the globals for use in templating.
|
||||
|
||||
Deprecated Features
|
||||
-------------------
|
||||
|
||||
- ansible-core - Remove support for Python 2.6.
|
||||
- ansible-test - Remove support for Python 2.6.
|
||||
- ssh connection plugin option scp_if_ssh in favor of ssh_transfer_method.
|
||||
|
||||
Removed Features (previously deprecated)
|
||||
----------------------------------------
|
||||
|
||||
- Remove deprecated ``Templar.set_available_variables()`` method (https://github.com/ansible/ansible/issues/75828)
|
||||
- cli - remove deprecated ability to set verbosity before the sub-command (https://github.com/ansible/ansible/issues/75823)
|
||||
- copy - remove deprecated ``thirsty`` alias (https://github.com/ansible/ansible/issues/75824)
|
||||
- psrp - Removed fallback on ``put_file`` with older ``pypsrp`` versions. Users must have at least ``pypsrp>=0.4.0``.
|
||||
- url_argument_spec - remove deprecated ``thirsty`` alias for ``get_url`` and ``uri`` modules (https://github.com/ansible/ansible/issues/75825, https://github.com/ansible/ansible/issues/75826)
|
||||
|
||||
Security Fixes
|
||||
--------------
|
||||
|
||||
- Do not include params in exception when a call to ``set_options`` fails. Additionally, block the exception that is returned from being displayed to stdout. (CVE-2021-3620)
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Add a YAML representer for ``NativeJinjaText``
|
||||
- Add a YAML representer for ``NativeJinjaUnsafeText``
|
||||
- AnsiballZ - Ensure we use the full python package in the module cache filename to avoid a case where ``collections:`` is used to execute a module via short name, where the short name duplicates another module from ``ansible.builtin`` or another collection that was executed previously.
|
||||
- Ansible.ModuleUtils.LinkUtil - Ignore the ``LIB`` environment variable when loading the ``LinkUtil`` code
|
||||
- Ansible.ModuleUtils.SID - Use user principal name as is for lookup in the ``Convert-ToSID`` function - https://github.com/ansible/ansible/issues/77316
|
||||
- Detect package manager for Amazon Linux 2022 (AL2022) as dnf
|
||||
- Ensure the correct ``environment_class`` is set on ``AnsibleJ2Template``
|
||||
- Fix ``AttributeError`` when providing password file via ``--connection-password-file`` (https://github.com/ansible/ansible/issues/76530)
|
||||
- Fix ``end_play`` to end the current play only (https://github.com/ansible/ansible/issues/76672)
|
||||
- Fix collection filter/test plugin redirects (https://github.com/ansible/ansible/issues/77192).
|
||||
- Fix executing includes in the always section in the free strategy (https://github.com/ansible/ansible/issues/75642)
|
||||
- Fix for when templating empty template file resulted in file with string 'None' (https://github.com/ansible/ansible/issues/76610)
|
||||
- Fix help message for the 'ansible-galaxy collection verify' positional argument. The positional argument must be a collection name (https://github.com/ansible/ansible/issues/76087).
|
||||
- Fix module logging issue when using custom module on WSL2 (https://github.com/ansible/ansible/issues/76320)
|
||||
- Fix task debugger to work with ``run_once`` using ``linear`` strategy (https://github.com/ansible/ansible/issues/76049)
|
||||
- Fix traceback when installing a collection from a git repository and git is not installed (https://github.com/ansible/ansible/issues/77479).
|
||||
- Interpreter Discovery - Fallback to OS family if the distro is not found in ``INTERPRETER_PYTHON_DISTRO_MAP`` (https://github.com/ansible/ansible/issues/75560)
|
||||
- Interpreter discovery - Add ``RHEL`` to ``OS_FAMILY_MAP`` for correct family fallback for interpreter discovery (https://github.com/ansible/ansible/issues/77368)
|
||||
- Make include_role/include_tasks work with any_errors_fatal (https://github.com/ansible/ansible/issues/50897)
|
||||
- Parser errors from within includes should not be rescueable (https://github.com/ansible/ansible/issues/73657)
|
||||
- Prevent losing unsafe on results returned from lookups (https://github.com/ansible/ansible/issues/77535)
|
||||
- Templating - Ensure we catch exceptions when getting ``.filters`` and ``.tests`` attributes on their respective plugins and properly error, instead of aborting which results in no filters being added to the jinja2 environment
|
||||
- Trigger an undefined error when an undefined variable is detected within a dictionary and/or list (https://github.com/ansible/ansible/pull/75587)
|
||||
- _run_loop - Add the task name to the warning (https://github.com/ansible/ansible/issues/76011)
|
||||
- ``Templar.copy_with_new_env`` - set the ``finalize`` method of the new ``Templar`` object for the new environment (https://github.com/ansible/ansible/issues/76379)
|
||||
- add_host/group_by: fix using changed_when in a loop (https://github.com/ansible/ansible/issues/71627)
|
||||
- ansible - Exclude Python 2.6 from Python interpreter discovery.
|
||||
- ansible-config avoid showing _terms and _input when --only-changed.
|
||||
- ansible-doc - Fix ansible-doc -l ansible.builtin / ansible.legacy not returning anything
|
||||
- ansible-doc - ignore plugin deprecation warnings (https://github.com/ansible/ansible/issues/75671)
|
||||
- ansible-galaxy - Add galaxy_collection_skeleton/galaxy_collection_skeleton_ignore configuration options
|
||||
- ansible-galaxy - Fix using the '--ignore-certs' option when there is no server-specific configuration for the Galaxy server.
|
||||
- ansible-galaxy - installing/downloading collections with invalid versions in git repositories and directories now gives a formatted error message (https://github.com/ansible/ansible/issues/76425, https://github.com/ansible/ansible/issues/75404).
|
||||
- ansible-galaxy - when installing a role properly raise an error when inaccessible path is specified multiple times in roles_path (e.g. via environment variable and command line option) (https://github.com/ansible/ansible/issues/76316)
|
||||
- ansible-galaxy collection build - Ignore any existing ``MANIFEST.json`` and ``FILES.json`` in the root directory when building a collection.
|
||||
- ansible-galaxy collection verify - display files/directories not included in the FILES.json as modified content.
|
||||
- ansible-galaxy publish - Fix warning and error detection in import messages to properly display them in Ansible
|
||||
- ansible-pull handle case where hostname and nodename are empty
|
||||
- ansible-test - Add default entry for Windows remotes to be used with unknown versions.
|
||||
- ansible-test - All virtual environments managed by ansible-test are marked as usable after being bootstrapped, to avoid errors caused by use of incomplete environments. Previously this was only done for sanity tests. Existing environments from previous versions of ansible-test will be recreated on demand due to lacking the new marker.
|
||||
- ansible-test - Automatic target requirements installation is now based on the target environment instead of the controller environment.
|
||||
- ansible-test - Correctly detect when running as the ``root`` user (UID 0) on the origin host. The result of the detection was incorrectly being inverted.
|
||||
- ansible-test - Don't fail if network cannot be disconnected (https://github.com/ansible/ansible/pull/77472)
|
||||
- ansible-test - Fix Python real prefix detection when running in a ``venv`` virtual environment.
|
||||
- ansible-test - Fix ``windows-integration`` and ``network-integration`` when used with the ``--docker`` option and user-provided inventory.
|
||||
- ansible-test - Fix installation and usage of ``pyyaml`` requirement for the ``import`` sanity test for collections.
|
||||
- ansible-test - Fix path to inventory file for ``windows-integration`` and ``network-integration`` commands for collections.
|
||||
- ansible-test - Fix plugin loading.
|
||||
- ansible-test - Fix skipping of tests marked ``needs/python`` on the origin host.
|
||||
- ansible-test - Fix skipping of tests marked ``needs/root`` on the origin host.
|
||||
- ansible-test - Fix the ``import`` sanity test to work properly when Ansible's built-in vendoring support is in use.
|
||||
- ansible-test - Fix the ``validate-modules`` sanity test to avoid double-loading the collection loader and possibly failing on import of the ``packaging`` module.
|
||||
- ansible-test - Fix traceback in ``import`` sanity test on Python 2.7 when ``pip`` is not available.
|
||||
- ansible-test - Fix traceback in the ``validate-modules`` sanity test when testing an Ansible module without any callables.
|
||||
- ansible-test - Fix traceback when running from an install and delegating execution to a different Python interpreter.
|
||||
- ansible-test - Fix traceback when using the ``--all`` option with PowerShell code coverage.
|
||||
- ansible-test - Fix type hints.
|
||||
- ansible-test - Import ``yaml.cyaml.CParser`` instead of ``_yaml.CParser`` in the ``yamllint`` sanity test.
|
||||
- ansible-test - Limit ``paramiko`` installation to versions before 2.9.0. This is required to maintain support for systems which do not support RSA SHA-2 algorithms.
|
||||
- ansible-test - Pylint Deprecated Plugin - Use correct message symbols when date or version is not a float or str (https://github.com/ansible/ansible/issues/77085)
|
||||
- ansible-test - Relocate constants to eliminate symlink.
|
||||
- ansible-test - Replace the directory portion of out-of-tree paths in JUnit files from integration tests with the ``out-of-tree:`` prefix.
|
||||
- ansible-test - Sanity tests run with the ``--requirements` option for Python 2.x now install ``virtualenv`` when it is missing or too old. Previously it was only installed if missing. Version 16.7.12 is now installed instead of the latest version.
|
||||
- ansible-test - Set the ``pytest`` option ``--rootdir`` instead of letting it be auto-detected.
|
||||
- ansible-test - Show an error message instead of a traceback when running outside of a supported directory.
|
||||
- ansible-test - Target integration test requirements are now correctly installed for target environments running on the controller.
|
||||
- ansible-test - The ``import`` sanity test no longer reports errors about ``packaging`` being missing when testing collections.
|
||||
- ansible-test - Update distribution test containers to version 3.1.0.
|
||||
- ansible-test - Update help links to reference ``ansible-core`` instead of ``ansible``.
|
||||
- ansible-test - Update unit tests to use the ``--forked`` option instead of the deprecated ``--boxed`` option.
|
||||
- ansible-test - Use https://ci-files.testing.ansible.com/ for instance bootstrapping instead of an S3 endpoint.
|
||||
- ansible-test - Use relative paths in JUnit files generated during integration test runs.
|
||||
- ansible-test - Use the correct variable to reference the client's SSH key when generating inventory.
|
||||
- ansible-test - Use the legacy collection loader for ``import`` sanity tests on target-only Python versions.
|
||||
- ansible-test - Virtual environments managed by ansible-test now use consistent versions of ``pip``, ``setuptools`` and ``wheel``. This avoids issues with virtual environments containing outdated or dysfunctional versions of these tools. The initial bootstrapping of ``pip`` is done by ansible-test from an HTTPS endpoint instead of creating the virtual environment with it already present.
|
||||
- ansible-test - fix a typo in validate-modules.
|
||||
- ansible-test - fixed support container failures (eg http-test-container) under podman
|
||||
- ansible-test compile sanity test - do not crash if a column could not be determined for an error (https://github.com/ansible/ansible/pull/77465).
|
||||
- ansible-test pslint - Fix error when encountering validation results that are highly nested - https://github.com/ansible/ansible/issues/74151
|
||||
- ansible-vault encrypt_string - fix ``--output`` option to correctly write encrypted string into given file (https://github.com/ansible/ansible/issues/75101)
|
||||
- ansible.builtin.file modification_time supports check_mode
|
||||
- ansible_facts.devices - Fix parsing of device serial number detected via sg_inq for rhel8 (https://github.com/ansible/ansible/issues/75420)
|
||||
- apt - fails to deploy deb file to old debian systems using python-apt < 0.8.9 (https://github.com/ansible/ansible/issues/47277)
|
||||
- arg_spec - Fix incorrect ``no_log`` warning when a parameter alias is used (https://github.com/ansible/ansible/pull/77576)
|
||||
- async - Improve performance of sending async callback events by never sending the full task through the queue (https://github.com/ansible/ansible/issues/76729)
|
||||
- catch the case that cowsay is broken which would lead to missing output
|
||||
- cleaning facts will now only warn about the variable name and not post the content, which can be undesireable to disclose
|
||||
- collection_loader - Implement 'find_spec' and 'exec_module' to override deprecated importlib methods 'find_module' and 'load_module' when applicable (https://github.com/ansible/ansible/issues/74660).
|
||||
- correctly inherit vars from parent in block (https://github.com/ansible/ansible/issues/75286).
|
||||
- default callback - Ensure we compare FQCN also in lockstep logic, to ensure using the FQCN of a strategy plugin triggers the correct behavior in the default callback plugin. (https://github.com/ansible/ansible/issues/76782)
|
||||
- distribution - add EuroLinux to fact gathering (https://github.com/ansible/ansible/pull/76624).
|
||||
- distribution - detect tencentos and gather correct facts on the distro.
|
||||
- dnf - ensure releasever is passed into libdnf as string (https://github.com/ansible/ansible/issues/77010)
|
||||
- extend timeout for ansible-galaxy when communicating with the galaxy server api, and apply it to all interactions with the api
|
||||
- facts - add support for deepin distro information detection (https://github.com/ansible/ansible/issues/77286).
|
||||
- first_found - fix to allow for spaces in file names (https://github.com/ansible/ansible/issues/77136)
|
||||
- gather_facts - Fact gathering now continues even if it fails to read a file
|
||||
- gather_facts action now handles the move of base connection plugin types into collections to add/prevent subset argument correctly
|
||||
- gather_facts/setup will not fail anymore if capsh is present but not executable
|
||||
- git module fix docs and proper use of ssh wrapper script and GIT_SSH_COMMAND depending on version.
|
||||
- git module is more consistent and clearer about which ssh options are added to git calls.
|
||||
- git module no longer uses wrapper script for ssh options.
|
||||
- hacking - fix incorrect usage of deprecated fish-shell redirection operators that failed to honor ``--quiet`` flag when sourced (https://github.com/ansible/ansible/pull/77180).
|
||||
- hostname - Do not require SystemdStrategy subclasses for every distro (https://github.com/ansible/ansible/issues/76792)
|
||||
- hostname - Fix Debian strategy KeyError, use `SystemdStrategy` (https://github.com/ansible/ansible/issues/76124)
|
||||
- hostname - Update the systemd strategy in the ``hostname`` module to not interfere with NetworkManager (https://github.com/ansible/ansible/issues/76958)
|
||||
- hostname - add hostname support for openEuler distro (https://github.com/ansible/ansible/pull/76619).
|
||||
- hostname - use ``file_get_content()`` to read the file containing the host name in the ``FileStrategy.get_permanent_hostname()`` method. This prevents a ``TypeError`` from being raised when the strategy is used (https://github.com/ansible/ansible/issues/77025).
|
||||
- include_vars, properly initialize variable as there is corner case in which it can end up referenced and not defined
|
||||
- inventory - parameterize ``disable_lookups`` in ``Constructable`` (https://github.com/ansible/ansible/issues/76769).
|
||||
- inventory manager now respects --flush-cache
|
||||
- junit callback - Fix traceback during automatic fact gathering when using relative paths.
|
||||
- junit callback - Fix unicode error when handling non-ASCII task paths.
|
||||
- module_utils.common.yaml - The ``SafeLoader``, ``SafeDumper`` and ``Parser`` classes now fallback to ``object`` when ``yaml`` is not available. This fixes tracebacks when inheriting from these classes without requiring a ``HAS_YAML`` guard around class definitions.
|
||||
- parameters - handle blank values when argument is a list (https://github.com/ansible/ansible/issues/77108).
|
||||
- play_context now compensates for when a conneciton sets the default to inventory_hostname but skips adding it to the vars.
|
||||
- playbook/strategy have more informative 'attribute' based errors for playbook objects and handlers.
|
||||
- python modules (new type) will now again prefer the specific python stated in the module's shebang instead of hardcoding to /usr/bin/python.
|
||||
- replace - Always return ``rc`` to ensure return values are consistent - https://github.com/ansible/ansible/pull/71963
|
||||
- script - skip in check mode if the plugin cannot determine if a change will occur (i.e. neither `creates` or `removes` are provided).
|
||||
- service - Fixed handling of sleep arguments during service restarts on AIX. (https://github.com/ansible/ansible/issues/76877)
|
||||
- service - Fixed service restarts with arguments on AIX. (https://github.com/ansible/ansible/issues/76840)
|
||||
- service_facts module will now give more meaningful warnings when it fails to gather data.
|
||||
- set_fact/include_vars correctly handle delegation assignments within loops
|
||||
- setup - detect docker container with check for ./dockerenv or ./dockinit (https://github.com/ansible/ansible/pull/74349).
|
||||
- shell/command - only return changed as True if the task has not been skipped.
|
||||
- shell/command - only skip in check mode if the options `creates` and `removes` are both None.
|
||||
- ssh connection - properly quote controlpersist path given by user to avoid issues with spaces and other characters
|
||||
- ssh connection avoid parsing ssh cli debug lines as they can match expected output at high verbosities.
|
||||
- ssh connection now uses more correct host source as play_context can ignore loop/delegation variations.
|
||||
- sudo become plugin, fix handling of non interactive flags, previous substitution was too naive
|
||||
- systemd - check if service is alias so it gets enabled (https://github.com/ansible/ansible/issues/75538).
|
||||
- systemd - check if service is indirect so it gets enabled (https://github.com/ansible/ansible/issues/76453).
|
||||
- task_executor reverts the change to push facts into delegated vars on loop finalization as result managing code already handles this and was duplicating effort to wrong result.
|
||||
- template lookup - restore inadvertently deleted default for ``convert_data`` (https://github.com/ansible/ansible/issues/77004)
|
||||
- to_json/to_nice_json filters defaults back to unvaulting/no unsafe packing.
|
||||
- unarchive - Fix zip archive file listing that caused issues with content postprocessing (https://github.com/ansible/ansible/issues/76067).
|
||||
- unarchive - Make extraction work when the LANGUAGE environment variable is set to a non-English locale.
|
||||
- unarchive - apply ``owner`` and ``group`` permissions to top folder (https://github.com/ansible/ansible/issues/35426)
|
||||
- unarchive - include the original error when a handler cannot manage the archive (https://github.com/ansible/ansible/issues/28977).
|
||||
- unarchive - the ``io_buffer_size`` option added in 2.12 was not accepted by the module (https://github.com/ansible/ansible/pull/77271).
|
||||
- urls - Allow ``ca_path`` to point to a bundle containing multiple PEM certs (https://github.com/ansible/ansible/issues/75015)
|
||||
- urls/uri - Address case where ``HTTPError`` isn't fully initialized due to the error, and is missing certain methods and attributes (https://github.com/ansible/ansible/issues/76386)
|
||||
- user - allow ``password_expiry_min`` and ``password_expiry_min`` to be set to ``0`` (https://github.com/ansible/ansible/issues/75017)
|
||||
- user - allow password min and max to be set at the same time (https://github.com/ansible/ansible/issues/75017)
|
||||
- user - update logic to check if user exists or not in MacOS.
|
||||
- validate_argument_spec - Skip suboption validation if the top level option is an invalid type (https://github.com/ansible/ansible/issues/75612).
|
||||
- variablemanager, more efficient read of vars files
|
||||
- vault - Warn instead of fail for missing vault IDs if at least one valid vault secret is found.
|
||||
- winrm - Ensure ``kinit`` is run with the same ``PATH`` env var as the Ansible process
|
||||
- yum - prevent storing unnecessary cache data by running `yum makecache fast` (https://github.com/ansible/ansible/issues/76336)
|
||||
|
||||
Known Issues
|
||||
------------
|
||||
|
||||
- get_url - document ``check_mode`` correctly with unreliable changed status (https://github.com/ansible/ansible/issues/65687).
|
||||
519
changelogs/CHANGELOG-v2.6.rst
Normal file
519
changelogs/CHANGELOG-v2.6.rst
Normal file
@ -0,0 +1,519 @@
|
||||
========================================
|
||||
Ansible 2.6 "Heartbreaker" Release Notes
|
||||
========================================
|
||||
|
||||
v2.6.0
|
||||
======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
| Release Date: 2018-06-28
|
||||
| `Porting Guide <https://docs.ansible.com/ansible/devel/porting_guides.html>`_
|
||||
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Added an ``encoding`` option to the ``b64encode`` and ``b64decode`` filters to specify the encoding of the string that is base64 encoded.
|
||||
- PowerShell modules that use Convert-ToSID in Ansible.ModuleUtils.SID.psm1 like win_user_right now accept an actual SID as an input string. This means any local or domain accounts that are named like a SID need to be prefixed with the domain, hostname, or . to ensure it converts to that accounts SID https://github.com/ansible/ansible/issues/38502
|
||||
- Raise AnsibleParserError which was missing previously
|
||||
- The aws_ses_identity module supports check mode
|
||||
- `postgresql_user` module changed `encrypted=yes` to be the default. This shouldn't break any current playbooks, the module will just store passwords hashed by default. This change was done because Postgres 10 dropped support for `UNENCRYPTED` passwords and because all versions since Postgres 7.2 support storing encrypted passwords.
|
||||
- azure_rm_loadbalancer - add support for sku
|
||||
- azure_rm_publicipaddress - add support for sku
|
||||
- cloudflare_dns module - Removed restriction from protocol to allow other protocols than tcp and udp to be specified.
|
||||
- command module - Added argv option to allow command to be specified as a list vs. a string (https://github.com/ansible/ansible/issues/19392)
|
||||
- gem - add ability to specify a custom directory for installing gems (https://github.com/ansible/ansible/pull/38195)
|
||||
- import/include - Cache task_vars to speed up IncludedFile.process_include_results (https://github.com/ansible/ansible/pull/39026)
|
||||
- postgresql_user module - Changed encrypted=yes to be the default. This shouldn't break any current playbooks, the module will just store passwords hashed by default. This change was done because Postgres 10 dropped support for UNENCRYPTED passwords and because all versions since Postgres 7.2 support storing encrypted passwords.
|
||||
- vmware_target_canonical_facts module - The target_id parameter is an optional parameter.
|
||||
|
||||
Deprecated Features
|
||||
-------------------
|
||||
|
||||
- nxos_igmp_interface module - The oif_prefix and oif_source properties are deprecated. Use the oif_ps parameter with a dictionary of prefix and source to values instead.
|
||||
|
||||
Removed Features (previously deprecated)
|
||||
----------------------------------------
|
||||
|
||||
- removed the deprecated always_run task option, please use `check_mode: no` instead
|
||||
- win_chocolatey - removed deprecated upgrade option and choco_* output return values
|
||||
- win_feature - removed deprecated reboot option
|
||||
- win_iis_webapppool - removed the ability to supply attributes as a string in favour of a dictionary
|
||||
- win_package - removed deprecated name option
|
||||
- win_regedit - removed deprecated support for specifying HKCC as HCCC
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- **Security Fix** - Some connection exceptions would cause no_log specified on a task to be ignored. If this happened, the task information, including any private information could have been displayed to stdout and (if enabled, not the default) logged to a log file specified in ansible.cfg's log_path. Additionally, sites which redirected stdout from ansible runs to a log file may have stored that private information onto disk that way as well. (https://github.com/ansible/ansible/pull/41414)
|
||||
- Changed the admin_users config option to not include "admin" by default as admin is frequently used for a non-privileged account (https://github.com/ansible/ansible/pull/41164)
|
||||
- Changed the output to "text" for "show vrf" command as default "json" output format with respect to "eapi" transport was failing (https://github.com/ansible/ansible/pull/41470)
|
||||
- Document mode=preserve for both the copy and template module
|
||||
- Fix added for Digital Ocean Volumes API change causing Ansible to recieve an unexpected value in the response. (https://github.com/ansible/ansible/pull/41431)
|
||||
- Fix an encoding issue when parsing the examples from a plugins' documentation
|
||||
- Fix iosxr_config module to handle route-policy, community-set, prefix-set, as-path-set and rd-set blocks. All these blocks are part of route-policy language of iosxr.
|
||||
- Fix mode=preserve with remote_src=True for the copy module
|
||||
- Implement mode=preserve for the template module
|
||||
- The yaml callback plugin now allows non-ascii characters to be displayed.
|
||||
- Various grafana_* modules - Port away from the deprecated b64encodestring function to the b64encode function instead. https://github.com/ansible/ansible/pull/38388
|
||||
- added missing 'raise' to exception definition https://github.com/ansible/ansible/pull/41690
|
||||
- allow custom endpoints to be used in the aws_s3 module (https://github.com/ansible/ansible/pull/36832)
|
||||
- allow set_options to be called multiple times https://github.com/ansible/ansible/pull/41913
|
||||
- ansible-doc - fixed traceback on missing plugins (https://github.com/ansible/ansible/pull/41167)
|
||||
- cast the device_mapping volume size to an int in the ec2_ami module (https://github.com/ansible/ansible/pull/40938)
|
||||
- copy - fixed copy to only follow symlinks for files in the non-recursive case
|
||||
- copy module - The copy module was attempting to change the mode of files for remote_src=True even if mode was not set as a parameter. This failed on filesystems which do not have permission bits (https://github.com/ansible/ansible/pull/40099)
|
||||
- copy module - fixed recursive copy with relative paths (https://github.com/ansible/ansible/pull/40166)
|
||||
- correct debug display for all cases https://github.com/ansible/ansible/pull/41331
|
||||
- correctly check hostvars for vars term https://github.com/ansible/ansible/pull/41819
|
||||
- correctly handle yaml inventory files when entries are null dicts https://github.com/ansible/ansible/issues/41692
|
||||
- dynamic includes - Allow inheriting attributes from static parents (https://github.com/ansible/ansible/pull/38827)
|
||||
- dynamic includes - Don't treat undefined vars for conditional includes as truthy (https://github.com/ansible/ansible/pull/39377)
|
||||
- dynamic includes - Fix IncludedFile comparison for free strategy (https://github.com/ansible/ansible/pull/37083)
|
||||
- dynamic includes - Improved performance by fixing re-parenting on copy (https://github.com/ansible/ansible/pull/38747)
|
||||
- dynamic includes - Use the copied and merged task for calculating task vars (https://github.com/ansible/ansible/pull/39762)
|
||||
- file - fixed the default follow behaviour of file to be true
|
||||
- file module - Eliminate an error if we're asked to remove a file but something removes it while we are processing the request (https://github.com/ansible/ansible/pull/39466)
|
||||
- file module - Fix error when recursively assigning permissions and a symlink to a nonexistent file is present in the directory tree (https://github.com/ansible/ansible/issues/39456)
|
||||
- file module - Fix error when running a task which assures a symlink to a nonexistent file exists for the second and subsequent times (https://github.com/ansible/ansible/issues/39558)
|
||||
- file module - The file module allowed the user to specify src as a parameter when state was not link or hard. This is documented as only applying to state=link or state=hard but in previous Ansible, this could have an effect in rare cornercases. For instance, "ansible -m file -a 'state=directory path=/tmp src=/var/lib'" would create /tmp/lib. This has been disabled and a warning emitted (will change to an error in Ansible-2.10).
|
||||
- file module - The touch subcommand had its diff output broken during the 2.6.x development cycle. This is now fixed (https://github.com/ansible/ansible/issues/41755)
|
||||
- fix BotoCoreError exception handling
|
||||
- fix apt-mark on debian6 (https://github.com/ansible/ansible/pull/41530)
|
||||
- fix async for the aws_s3 module by adding async support to the action plugin (https://github.com/ansible/ansible/pull/40826)
|
||||
- fix decrypting vault files for the aws_s3 module (https://github.com/ansible/ansible/pull/39634)
|
||||
- fix errors with S3-compatible APIs if they cannot use ACLs for buckets or objects
|
||||
- fix permission handling to try to download a file even if the user does not have permission to list all objects in the bucket
|
||||
- fixed config required handling, specifically for _terms in lookups https://github.com/ansible/ansible/pull/41740
|
||||
- gce_net - Fix sorting of allowed ports (https://github.com/ansible/ansible/pull/41567)
|
||||
- group_by - support implicit localhost (https://github.com/ansible/ansible/pull/41860)
|
||||
- import/include - Ensure role handlers have the proper parent, allowing for correct attribute inheritance (https://github.com/ansible/ansible/pull/39426)
|
||||
- import_playbook - Pass vars applied to import_playbook into parsing of the playbook as they may be needed to parse the imported plays (https://github.com/ansible/ansible/pull/39521)
|
||||
- include_role/import_role - Don't overwrite included role handlers with play handlers on parse (https://github.com/ansible/ansible/pull/39563)
|
||||
- include_role/import_role - Fix parameter templating (https://github.com/ansible/ansible/pull/36372)
|
||||
- include_role/import_role - Use the computed role name for include_role/import_role so to diffentiate between names computed from host vars (https://github.com/ansible/ansible/pull/39516)
|
||||
- include_role/import_role - improved performance and recursion depth (https://github.com/ansible/ansible/pull/36470)
|
||||
- lineinfile - fix insertbefore when used with BOF to not insert duplicate lines (https://github.com/ansible/ansible/issues/38219)
|
||||
- password lookup - Do not load password lookup in network filters, allowing the password lookup to be overriden (https://github.com/ansible/ansible/pull/41907)
|
||||
- pause - ensure ctrl+c interrupt works in all cases (https://github.com/ansible/ansible/issues/35372)
|
||||
- powershell - use the tmpdir set by `remote_tmp` for become/async tasks instead of the generic $env:TEMP - https://github.com/ansible/ansible/pull/40210
|
||||
- selinux - correct check mode behavior to report same changes as normal mode (https://github.com/ansible/ansible/pull/40721)
|
||||
- spwd - With python 3.6 spwd.getspnam returns PermissionError instead of KeyError if user does not have privileges (https://github.com/ansible/ansible/issues/39472)
|
||||
- synchronize - Ensure the local connection created by synchronize uses _remote_is_local=True, which causes ActionBase to build a local tmpdir (https://github.com/ansible/ansible/pull/40833)
|
||||
- template - Fix for encoding issues when a template path contains non-ascii characters and using the template path in ansible_managed (https://github.com/ansible/ansible/issues/27262)
|
||||
- template action plugin - fix the encoding of filenames to avoid tracebacks on Python2 when characters that are not present in the user's locale are present. (https://github.com/ansible/ansible/pull/39424)
|
||||
- user - only change the expiration time when necessary (https://github.com/ansible/ansible/issues/13235)
|
||||
- uses correct conn info for reset_connection https://github.com/ansible/ansible/issues/27520
|
||||
- win_environment - Fix for issue where the environment value was deleted when a null value or empty string was set - https://github.com/ansible/ansible/issues/40450
|
||||
- win_file - fix issue where special chars like [ and ] were not being handled correctly https://github.com/ansible/ansible/pull/37901
|
||||
- win_get_url - fixed a few bugs around authentication and force no when using an FTP URL
|
||||
- win_iis_webapppool - redirect some module output to null so Ansible can read the output JSON https://github.com/ansible/ansible/issues/40874
|
||||
- win_template - fix when specifying the dest option as a directory with and without the trailing slash https://github.com/ansible/ansible/issues/39886
|
||||
- win_updates - Added the ability to run on a scheduled task for older hosts so async starts working again - https://github.com/ansible/ansible/issues/38364
|
||||
- win_updates - Fix logic when using a whitelist for multiple updates
|
||||
- win_updates - Fix typo that hid the download error when a download failed
|
||||
- win_updates - Fixed issue where running win_updates on async fails without any error
|
||||
- windows become - Show better error messages when the become process fails
|
||||
- winrm - Add better error handling when the kinit process fails
|
||||
- winrm - allow `ansible_user` or `ansible_winrm_user` to override `ansible_ssh_user` when both are defined in an inventory - https://github.com/ansible/ansible/issues/39844
|
||||
- winrm - ensure pexpect is set to not echo the input on a failure and have a manual sanity check afterwards https://github.com/ansible/ansible/issues/41865
|
||||
- winrm connection plugin - Fix exception messages sometimes raising a traceback when the winrm connection plugin encounters an unrecoverable error. https://github.com/ansible/ansible/pull/39333
|
||||
- xenserver_facts - ensure module works with newer versions of XenServer (https://github.com/ansible/ansible/pull/35821)
|
||||
|
||||
New Plugins
|
||||
-----------
|
||||
|
||||
Callback
|
||||
~~~~~~~~
|
||||
|
||||
- cgroup_memory_recap - Profiles maximum memory usage of tasks and full execution using cgroups
|
||||
- grafana_annotations - send ansible events as annotations on charts to grafana over http api.
|
||||
- sumologic - Sends task result events to Sumologic
|
||||
|
||||
Connection
|
||||
~~~~~~~~~~
|
||||
|
||||
- httpapi - Use httpapi to run command on network appliances
|
||||
|
||||
Inventory
|
||||
~~~~~~~~~
|
||||
|
||||
- foreman - foreman inventory source
|
||||
- gcp_compute - Google Cloud Compute Engine inventory source
|
||||
- generator - Uses Jinja2 to construct hosts and groups from patterns
|
||||
- nmap - Uses nmap to find hosts to target
|
||||
|
||||
Lookup
|
||||
~~~~~~
|
||||
|
||||
- onepassword - fetch field values from 1Password
|
||||
- onepassword_raw - fetch raw json data from 1Password
|
||||
|
||||
New Modules
|
||||
-----------
|
||||
|
||||
Cloud
|
||||
~~~~~
|
||||
|
||||
amazon
|
||||
^^^^^^
|
||||
|
||||
- aws_caller_facts - Get facts about the user and account being used to make AWS calls.
|
||||
- aws_config_aggregation_authorization - Manage cross-account AWS Config authorizations
|
||||
- aws_config_aggregator - Manage AWS Config aggregations across multiple accounts
|
||||
- aws_config_delivery_channel - Manage AWS Config delivery channels
|
||||
- aws_config_recorder - Manage AWS Config Recorders
|
||||
- aws_config_rule - Manage AWS Config resources
|
||||
- aws_glue_connection - Manage an AWS Glue connection
|
||||
- aws_glue_job - Manage an AWS Glue job
|
||||
- aws_inspector_target - Create, Update and Delete Amazon Inspector Assessment Targets
|
||||
- aws_ses_identity_policy - Manages SES sending authorization policies
|
||||
- aws_sgw_facts - Fetch AWS Storage Gateway facts
|
||||
- ec2_eip_facts - List EC2 EIP details
|
||||
- ec2_vpc_vpn_facts - Gather facts about VPN Connections in AWS.
|
||||
- elb_network_lb - Manage a Network Load Balancer
|
||||
- rds_instance_facts - obtain facts about one or more RDS instances
|
||||
- rds_snapshot_facts - obtain facts about one or more RDS snapshots
|
||||
|
||||
azure
|
||||
^^^^^
|
||||
|
||||
- azure_rm_aks - Manage a managed Azure Container Service (AKS) Instance.
|
||||
- azure_rm_aks_facts - Get Azure Kubernetes Service facts.
|
||||
- azure_rm_resource - Create any Azure resource.
|
||||
- azure_rm_resource_facts - Generic facts of Azure resources.
|
||||
|
||||
cloudstack
|
||||
^^^^^^^^^^
|
||||
|
||||
- cs_role_permission - Manages role permissions on Apache CloudStack based clouds.
|
||||
|
||||
digital_ocean
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
- digital_ocean_account_facts - Gather facts about DigitalOcean User account
|
||||
- digital_ocean_certificate_facts - Gather facts about DigitalOcean certificates
|
||||
- digital_ocean_domain_facts - Gather facts about DigitalOcean Domains
|
||||
- digital_ocean_image_facts - Gather facts about DigitalOcean images
|
||||
- digital_ocean_load_balancer_facts - Gather facts about DigitalOcean load balancers
|
||||
- digital_ocean_region_facts - Gather facts about DigitalOcean regions
|
||||
- digital_ocean_size_facts - Gather facts about DigitalOcean Droplet sizes
|
||||
- digital_ocean_snapshot_facts - Gather facts about DigitalOcean Snapshot
|
||||
- digital_ocean_tag_facts - Gather facts about DigitalOcean tags
|
||||
- digital_ocean_volume_facts - Gather facts about DigitalOcean volumes
|
||||
|
||||
google
|
||||
^^^^^^
|
||||
|
||||
- gcp_compute_address - Creates a GCP Address
|
||||
- gcp_compute_backend_bucket - Creates a GCP BackendBucket
|
||||
- gcp_compute_backend_service - Creates a GCP BackendService
|
||||
- gcp_compute_disk - Creates a GCP Disk
|
||||
- gcp_compute_firewall - Creates a GCP Firewall
|
||||
- gcp_compute_forwarding_rule - Creates a GCP ForwardingRule
|
||||
- gcp_compute_global_address - Creates a GCP GlobalAddress
|
||||
- gcp_compute_global_forwarding_rule - Creates a GCP GlobalForwardingRule
|
||||
- gcp_compute_health_check - Creates a GCP HealthCheck
|
||||
- gcp_compute_http_health_check - Creates a GCP HttpHealthCheck
|
||||
- gcp_compute_https_health_check - Creates a GCP HttpsHealthCheck
|
||||
- gcp_compute_image - Creates a GCP Image
|
||||
- gcp_compute_instance - Creates a GCP Instance
|
||||
- gcp_compute_instance_group - Creates a GCP InstanceGroup
|
||||
- gcp_compute_instance_group_manager - Creates a GCP InstanceGroupManager
|
||||
- gcp_compute_instance_template - Creates a GCP InstanceTemplate
|
||||
- gcp_compute_network - Creates a GCP Network
|
||||
- gcp_compute_route - Creates a GCP Route
|
||||
- gcp_compute_ssl_certificate - Creates a GCP SslCertificate
|
||||
- gcp_compute_subnetwork - Creates a GCP Subnetwork
|
||||
- gcp_compute_target_http_proxy - Creates a GCP TargetHttpProxy
|
||||
- gcp_compute_target_https_proxy - Creates a GCP TargetHttpsProxy
|
||||
- gcp_compute_target_pool - Creates a GCP TargetPool
|
||||
- gcp_compute_target_ssl_proxy - Creates a GCP TargetSslProxy
|
||||
- gcp_compute_target_tcp_proxy - Creates a GCP TargetTcpProxy
|
||||
- gcp_compute_url_map - Creates a GCP UrlMap
|
||||
- gcp_container_cluster - Creates a GCP Cluster
|
||||
- gcp_container_node_pool - Creates a GCP NodePool
|
||||
- gcp_dns_resource_record_set - Creates a GCP ResourceRecordSet
|
||||
- gcp_pubsub_subscription - Creates a GCP Subscription
|
||||
- gcp_pubsub_topic - Creates a GCP Topic
|
||||
- gcp_storage_bucket - Creates a GCP Bucket
|
||||
- gcp_storage_bucket_access_control - Creates a GCP BucketAccessControl
|
||||
|
||||
heroku
|
||||
^^^^^^
|
||||
|
||||
- heroku_collaborator - Add or delete app collaborators on Heroku
|
||||
|
||||
memset
|
||||
^^^^^^
|
||||
|
||||
- memset_dns_reload - Request reload of Memset's DNS infrastructure,
|
||||
- memset_zone - Creates and deletes Memset DNS zones.
|
||||
- memset_zone_domain - Create and delete domains in Memset DNS zones.
|
||||
- memset_zone_record - Create and delete records in Memset DNS zones.
|
||||
|
||||
misc
|
||||
^^^^
|
||||
|
||||
- cloud_init_data_facts - Retrieve facts of cloud-init.
|
||||
|
||||
opennebula
|
||||
^^^^^^^^^^
|
||||
|
||||
- one_host - Manages OpenNebula Hosts
|
||||
- one_image - Manages OpenNebula images
|
||||
- one_image_facts - Gather facts about OpenNebula images
|
||||
- one_service - Deploy and manage OpenNebula services
|
||||
- one_vm - Creates or terminates OpenNebula instances
|
||||
|
||||
openstack
|
||||
^^^^^^^^^
|
||||
|
||||
- os_server_metadata - Add/Update/Delete Metadata in Compute Instances from OpenStack
|
||||
- os_volume_snapshot - Create/Delete Cinder Volume Snapshots
|
||||
|
||||
scaleway
|
||||
^^^^^^^^
|
||||
|
||||
- scaleway_compute - Scaleway compute management module
|
||||
- scaleway_sshkey - Scaleway SSH keys management module
|
||||
|
||||
vmware
|
||||
^^^^^^
|
||||
|
||||
- vmware_cluster_facts - Gather facts about clusters available in given vCenter
|
||||
- vmware_datastore_cluster - Manage VMware vSphere datastore clusters
|
||||
- vmware_datastore_maintenancemode - Place a datastore into maintenance mode
|
||||
- vmware_guest_disk_facts - Gather facts about disks of given virtual machine
|
||||
- vmware_guest_snapshot_facts - Gather facts about virtual machine's snapshots in vCenter
|
||||
- vmware_host_capability_facts - Gathers facts about an ESXi host's capability information
|
||||
- vmware_host_powerstate - Manages power states of host systems in vCenter
|
||||
- vmware_local_user_facts - Gather facts about users on the given ESXi host
|
||||
- vmware_portgroup_facts - Gathers facts about an ESXi host's portgroup configuration
|
||||
- vmware_resource_pool_facts - Gathers facts about resource pool information
|
||||
- vmware_tag - Manage VMware tags
|
||||
- vmware_tag_facts - Manage VMware tag facts
|
||||
- vmware_vswitch_facts - Gathers facts about an ESXi host's vswitch configurations
|
||||
|
||||
Clustering
|
||||
~~~~~~~~~~
|
||||
|
||||
k8s
|
||||
^^^
|
||||
|
||||
- k8s - Manage Kubernetes (K8s) objects
|
||||
|
||||
Commands
|
||||
~~~~~~~~
|
||||
|
||||
- psexec - Runs commands on a remote Windows host based on the PsExec model
|
||||
|
||||
Monitoring
|
||||
~~~~~~~~~~
|
||||
|
||||
- spectrum_device - Creates/deletes devices in CA Spectrum.
|
||||
|
||||
zabbix
|
||||
^^^^^^
|
||||
|
||||
- zabbix_group_facts - Gather facts about Zabbix hostgroup
|
||||
|
||||
Net Tools
|
||||
~~~~~~~~~
|
||||
|
||||
ldap
|
||||
^^^^
|
||||
|
||||
- ldap_passwd - Set passwords in LDAP.
|
||||
|
||||
Network
|
||||
~~~~~~~
|
||||
|
||||
aci
|
||||
^^^
|
||||
|
||||
- aci_l3out - Manage Layer 3 Outside (L3Out) objects (l3ext:Out)
|
||||
|
||||
avi
|
||||
^^^
|
||||
|
||||
- avi_autoscalelaunchconfig - Module for setup of AutoScaleLaunchConfig Avi RESTful Object
|
||||
- avi_l4policyset - Module for setup of L4PolicySet Avi RESTful Object
|
||||
- avi_useraccount - Avi UserAccount Module
|
||||
|
||||
cnos
|
||||
^^^^
|
||||
|
||||
- cnos_command - Run arbitrary commands on Lenovo CNOS devices
|
||||
- cnos_config - Manage Lenovo CNOS configuration sections
|
||||
|
||||
exos
|
||||
^^^^
|
||||
|
||||
- exos_command - Run commands on remote devices running Extreme EXOS
|
||||
|
||||
f5
|
||||
^^
|
||||
|
||||
- bigip_data_group - Manage data groups on a BIG-IP
|
||||
- bigip_device_license - Manage license installation and activation on BIG-IP devices
|
||||
- bigip_gtm_global - Manages global GTM settings
|
||||
- bigip_gtm_monitor_bigip - Manages F5 BIG-IP GTM BIG-IP monitors
|
||||
- bigip_gtm_monitor_external - Manages external GTM monitors on a BIG-IP
|
||||
- bigip_gtm_monitor_firepass - Manages F5 BIG-IP GTM FirePass monitors
|
||||
- bigip_gtm_monitor_http - Manages F5 BIG-IP GTM http monitors
|
||||
- bigip_gtm_monitor_https - Manages F5 BIG-IP GTM https monitors
|
||||
- bigip_gtm_monitor_tcp - Manages F5 BIG-IP GTM tcp monitors
|
||||
- bigip_gtm_monitor_tcp_half_open - Manages F5 BIG-IP GTM tcp half-open monitors
|
||||
- bigip_gtm_pool_member - Manage GTM pool member settings
|
||||
- bigip_gtm_virtual_server - Manages F5 BIG-IP GTM virtual servers
|
||||
- bigip_log_destination - Manages log destinations on a BIG-IP.
|
||||
- bigip_log_publisher - Manages log publishers on a BIG-IP
|
||||
- bigip_management_route - Manage system management routes on a BIG-IP
|
||||
- bigip_monitor_external - Manages external LTM monitors on a BIG-IP
|
||||
- bigip_profile_dns - Manage DNS profiles on a BIG-IP
|
||||
- bigip_profile_tcp - Manage TCP profiles on a BIG-IP
|
||||
- bigip_profile_udp - Manage UDP profiles on a BIG-IP
|
||||
- bigip_service_policy - Manages service policies on a BIG-IP.
|
||||
- bigip_smtp - Manages SMTP settings on the BIG-IP
|
||||
- bigip_snmp_community - Manages SNMP communities on a BIG-IP.
|
||||
- bigip_timer_policy - Manage timer policies on a BIG-IP
|
||||
- bigip_trunk - Manage trunks on a BIG-IP
|
||||
- bigiq_application_fasthttp - Manages BIG-IQ FastHTTP applications
|
||||
- bigiq_application_fastl4_tcp - Manages BIG-IQ FastL4 TCP applications
|
||||
- bigiq_application_fastl4_udp - Manages BIG-IQ FastL4 UDP applications
|
||||
- bigiq_application_http - Manages BIG-IQ HTTP applications
|
||||
- bigiq_application_https_offload - Manages BIG-IQ HTTPS offload applications
|
||||
- bigiq_application_https_waf - Manages BIG-IQ HTTPS WAF applications
|
||||
- bigiq_regkey_license_assignment - Manage regkey license assignment on BIG-IPs from a BIG-IQ.
|
||||
- bigiq_utility_license - Manage utility licenses on a BIG-IQ
|
||||
|
||||
files
|
||||
^^^^^
|
||||
|
||||
- net_get - Copy files from a network device to Ansible Controller
|
||||
- net_put - Copy files from Ansibe controller to a network device
|
||||
|
||||
fortios
|
||||
^^^^^^^
|
||||
|
||||
- fortios_webfilter - Configure webfilter capabilities of FortiGate and FortiOS.
|
||||
|
||||
meraki
|
||||
^^^^^^
|
||||
|
||||
- meraki_admin - Manage administrators in the Meraki cloud
|
||||
- meraki_network - Manage networks in the Meraki cloud
|
||||
- meraki_organization - Manage organizations in the Meraki cloud
|
||||
- meraki_snmp - Manage organizations in the Meraki cloud
|
||||
|
||||
netconf
|
||||
^^^^^^^
|
||||
|
||||
- netconf_get - Fetch configuration/state data from NETCONF enabled network devices.
|
||||
- netconf_rpc - Execute operations on NETCONF enabled network devices.
|
||||
|
||||
slxos
|
||||
^^^^^
|
||||
|
||||
- slxos_command - Run commands on remote devices running Extreme Networks SLX-OS
|
||||
- slxos_config - Manage Extreme Networks SLX-OS configuration sections
|
||||
- slxos_facts - Collect facts from devices running Extreme SLX-OS
|
||||
- slxos_interface - Manage Interfaces on Extreme SLX-OS network devices
|
||||
- slxos_l2_interface - Manage Layer-2 interface on Extreme Networks SLXOS devices.
|
||||
- slxos_l3_interface - Manage L3 interfaces on Extreme Networks SLXOS network devices.
|
||||
- slxos_linkagg - Manage link aggregation groups on Extreme Networks SLXOS network devices
|
||||
- slxos_vlan - Manage VLANs on Extreme Networks SLX-OS network devices
|
||||
|
||||
Packaging
|
||||
~~~~~~~~~
|
||||
|
||||
language
|
||||
^^^^^^^^
|
||||
|
||||
- yarn - Manage node.js packages with Yarn
|
||||
|
||||
os
|
||||
^^
|
||||
|
||||
- flatpak - Manage flatpaks
|
||||
- flatpak_remote - Manage flatpak repository remotes
|
||||
|
||||
Source Control
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
- gitlab_deploy_key - Manages GitLab project deploy keys.
|
||||
- gitlab_hooks - Manages GitLab project hooks.
|
||||
|
||||
Storage
|
||||
~~~~~~~
|
||||
|
||||
glusterfs
|
||||
^^^^^^^^^
|
||||
|
||||
- gluster_peer - Attach/Detach peers to/from the cluster
|
||||
|
||||
netapp
|
||||
^^^^^^
|
||||
|
||||
- na_ontap_aggregate - Manage NetApp ONTAP aggregates.
|
||||
- na_ontap_broadcast_domain - Manage NetApp ONTAP broadcast domains.
|
||||
- na_ontap_broadcast_domain_ports - Manage NetApp Ontap broadcast domain ports
|
||||
- na_ontap_cifs - Manage NetApp cifs-share
|
||||
- na_ontap_cifs_acl - Manage NetApp cifs-share-access-control
|
||||
- na_ontap_cifs_server - cifs server configuration
|
||||
- na_ontap_cluster - Create/Join ONTAP cluster. Apply license to cluster
|
||||
- na_ontap_cluster_ha - Manage HA status for cluster
|
||||
- na_ontap_export_policy - Manage NetApp ONTAP export-policy
|
||||
- na_ontap_export_policy_rule - Manage ONTAP Export rules
|
||||
- na_ontap_igroup - ONTAP iSCSI igroup configuration
|
||||
- na_ontap_interface - ONTAP LIF configuration
|
||||
- na_ontap_iscsi - Manage NetApp Ontap iscsi service
|
||||
- na_ontap_job_schedule - Manage NetApp Ontap Job Schedule
|
||||
- na_ontap_license - Manage NetApp ONTAP protocol and feature licenses
|
||||
- na_ontap_lun - Manage NetApp Ontap luns
|
||||
- na_ontap_lun_map - Manage NetApp Ontap lun maps
|
||||
- na_ontap_net_ifgrp - Create, modify, destroy the network interface group
|
||||
- na_ontap_net_port - Manage NetApp Ontap network ports.
|
||||
- na_ontap_net_routes - Manage NetApp Ontap network routes
|
||||
- na_ontap_net_vlan - Manage NetApp Ontap network vlan
|
||||
- na_ontap_nfs - Manage Ontap NFS status
|
||||
- na_ontap_ntp - Create/Delete/modify_version ONTAP NTP server
|
||||
- na_ontap_qtree - Manage qtrees
|
||||
- na_ontap_service_processor_network - Manage NetApp Ontap service processor network
|
||||
- na_ontap_snapshot - Manage NetApp Sanpshots
|
||||
- na_ontap_snmp - Manage NetApp SNMP community
|
||||
- na_ontap_svm - Manage NetApp Ontap svm
|
||||
- na_ontap_ucadapter - ONTAP UC adapter configuration
|
||||
- na_ontap_user - useradmin configuration and management
|
||||
- na_ontap_user_role - useradmin configuration and management
|
||||
- na_ontap_volume - Manage NetApp ONTAP volumes.
|
||||
- na_ontap_volume_clone - Manage NetApp Ontap volume clones.
|
||||
|
||||
purestorage
|
||||
^^^^^^^^^^^
|
||||
|
||||
- purefa_ds - Configure FlashArray Directory Service
|
||||
- purefa_facts - Collect facts from Pure Storage FlashArray
|
||||
- purefa_pgsnap - Manage protection group snapshots on Pure Storage FlashArrays
|
||||
- purefb_fs - Manage filesystemon Pure Storage FlashBlade`
|
||||
- purefb_snap - Manage filesystem snapshots on Pure Storage FlashBlades
|
||||
|
||||
System
|
||||
~~~~~~
|
||||
|
||||
- sysvinit - Manage SysV services.
|
||||
|
||||
Web Infrastructure
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- acme_account - Create, modify or delete accounts with Let's Encrypt
|
||||
|
||||
Windows
|
||||
~~~~~~~
|
||||
|
||||
- win_domain_computer - Manage computers in Active Directory
|
||||
- win_hostname - Manages local Windows computer name.
|
||||
- win_pester - Run Pester tests on Windows hosts
|
||||
@ -1,6 +0,0 @@
|
||||
Placeholder changelog
|
||||
=====================
|
||||
|
||||
This file is a placeholder; a version-specific ``CHANGELOG-vX.Y.rst`` will be generated during releases from fragments
|
||||
under changelogs/fragments. On release branches once a release has been created, consult the branch's version-specific
|
||||
file for changes that have occurred in that branch.
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,22 +1,13 @@
|
||||
---
|
||||
title: ansible-core
|
||||
release_tag_re: '(v(?:[\d.ab\-]|rc)+)'
|
||||
pre_release_tag_re: '(?P<pre_release>(?:[ab]|rc)+\d*)$'
|
||||
changes_file: changelog.yaml
|
||||
changes_format: combined
|
||||
keep_fragments: true
|
||||
always_refresh: true
|
||||
ignore_other_fragment_extensions: true
|
||||
mention_ancestor: false
|
||||
notesdir: fragments
|
||||
prelude_section_name: release_summary
|
||||
new_plugins_after_name: removed_features
|
||||
sections:
|
||||
- ['major_changes', 'Major Changes']
|
||||
- ['minor_changes', 'Minor Changes']
|
||||
- ['breaking_changes', 'Breaking Changes / Porting Guide']
|
||||
- ['deprecated_features', 'Deprecated Features']
|
||||
- ['removed_features', 'Removed Features (previously deprecated)']
|
||||
- ['security_fixes', 'Security Fixes']
|
||||
- ['bugfixes', 'Bugfixes']
|
||||
- ['known_issues', 'Known Issues']
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- ansible_facts.devices - Fix parsing of device serial number detected via sg_inq for rhel8 (https://github.com/ansible/ansible/issues/75420)
|
||||
2
changelogs/fragments/41167_ansible_doc_regression.yaml
Normal file
2
changelogs/fragments/41167_ansible_doc_regression.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
bugfixes:
|
||||
- ansible-doc - fixed traceback on missing plugins (https://github.com/ansible/ansible/pull/41167)
|
||||
2
changelogs/fragments/41530-apt-mark-deb6.yaml
Normal file
2
changelogs/fragments/41530-apt-mark-deb6.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
bugfixes:
|
||||
- fix apt-mark on debian6 (https://github.com/ansible/ansible/pull/41530)
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- apt - fails to deploy deb file to old debian systems using python-apt < 0.8.9 (https://github.com/ansible/ansible/issues/47277)
|
||||
@ -1,3 +0,0 @@
|
||||
minor_changes:
|
||||
- uri - Eliminate multiple requests to determine the final URL for file naming with ``dest``
|
||||
- uri - Avoid reading the response body when not needed
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- Make include_role/include_tasks work with any_errors_fatal (https://github.com/ansible/ansible/issues/50897)
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- uri - properly use uri parameter use_proxy (https://github.com/ansible/ansible/issues/58632)
|
||||
@ -1,2 +0,0 @@
|
||||
minor_changes:
|
||||
- ansible-galaxy - the option to skip certificate verification now also applies when cloning via SCM (git/hg) (https://github.com/ansible/ansible/issues/41077)
|
||||
@ -1,3 +0,0 @@
|
||||
---
|
||||
minor_changes:
|
||||
- Added AIX root CA certs folders - enhance the TLS support in ``uri`` task on AIX
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- ansible-galaxy - do not require mandatory keys in the ``galaxy.yml`` of source collections when listing them (https://github.com/ansible/ansible/issues/70180).
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- "add_host/group_by: fix using changed_when in a loop (https://github.com/ansible/ansible/issues/71627)"
|
||||
@ -1,2 +0,0 @@
|
||||
minor_changes:
|
||||
- "ansible-test sanity validate-modules - the validate-modules sanity test now also checks the documentation of documentable plugin types (https://github.com/ansible/ansible/pull/71734)."
|
||||
@ -1,2 +0,0 @@
|
||||
minor_changes:
|
||||
- git - display the destination directory path in error msg when local_mods detects local modifications conflict so that users see the exact location
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- catch the case that cowsay is broken which would lead to missing output
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- unarchive - apply ``owner`` and ``group`` permissions to top folder (https://github.com/ansible/ansible/issues/35426)
|
||||
@ -1,3 +0,0 @@
|
||||
minor_changes:
|
||||
- apt - Adds APT option ``--allow-change-held-packages`` as module parameter ``allow_change_held_packages`` to allow APT up- or
|
||||
downgrading a package which is on APTs hold list (https://github.com/ansible/ansible/issues/65325)
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- Parser errors from within includes should not be rescueable (https://github.com/ansible/ansible/issues/73657)
|
||||
@ -1,5 +0,0 @@
|
||||
bugfixes:
|
||||
- Templating - Ensure we catch exceptions when getting ``.filters`` and
|
||||
``.tests`` attributes on their respective plugins and properly error,
|
||||
instead of aborting which results in no filters being added to the
|
||||
jinja2 environment
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- setup - detect docker container with check for ./dockerenv or ./dockinit (https://github.com/ansible/ansible/pull/74349).
|
||||
@ -1,2 +0,0 @@
|
||||
minor_changes:
|
||||
- "PlayIterator - introduce public methods to access ``PlayIterator._host_states`` (https://github.com/ansible/ansible/pull/74416)"
|
||||
@ -1,3 +0,0 @@
|
||||
---
|
||||
bugfixes:
|
||||
- Fix for network_cli not getting all relevant connection options
|
||||
@ -1,2 +0,0 @@
|
||||
minor_changes:
|
||||
- "PlayIterator - use enums for Iterating and Failed states (https://github.com/ansible/ansible/pull/74511)"
|
||||
@ -1,2 +0,0 @@
|
||||
minor_changes:
|
||||
- apt - Add support for using ">=" in package version number matching.
|
||||
@ -1,3 +0,0 @@
|
||||
bugfixes:
|
||||
- urls - Allow ``ca_path`` to point to a bundle containing multiple PEM certs
|
||||
(https://github.com/ansible/ansible/issues/75015)
|
||||
@ -1,3 +0,0 @@
|
||||
bugfixes:
|
||||
- user - allow ``password_expiry_min`` and ``password_expiry_min`` to be set to ``0`` (https://github.com/ansible/ansible/issues/75017)
|
||||
- user - allow password min and max to be set at the same time (https://github.com/ansible/ansible/issues/75017)
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- "ansible-vault encrypt_string - fix ``--output`` option to correctly write encrypted string into given file (https://github.com/ansible/ansible/issues/75101)"
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- systemd - check if service is alias so it gets enabled (https://github.com/ansible/ansible/issues/75538).
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- vault - Warn instead of fail for missing vault IDs if at least one valid vault secret is found.
|
||||
@ -1,4 +0,0 @@
|
||||
bugfixes:
|
||||
- Interpreter Discovery - Fallback to OS family if the distro is not found in
|
||||
``INTERPRETER_PYTHON_DISTRO_MAP``
|
||||
(https://github.com/ansible/ansible/issues/75560)
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- validate_argument_spec - Skip suboption validation if the top level option is an invalid type (https://github.com/ansible/ansible/issues/75612).
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- Fix executing includes in the always section in the free strategy (https://github.com/ansible/ansible/issues/75642)
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- ansible-doc - ignore plugin deprecation warnings (https://github.com/ansible/ansible/issues/75671)
|
||||
@ -1,2 +0,0 @@
|
||||
removed_features:
|
||||
- cli - remove deprecated ability to set verbosity before the sub-command (https://github.com/ansible/ansible/issues/75823)
|
||||
@ -1,2 +0,0 @@
|
||||
removed_features:
|
||||
- copy - remove deprecated ``thirsty`` alias (https://github.com/ansible/ansible/issues/75824)
|
||||
@ -1,2 +0,0 @@
|
||||
removed_features:
|
||||
- url_argument_spec - remove deprecated ``thirsty`` alias for ``get_url`` and ``uri`` modules (https://github.com/ansible/ansible/issues/75825, https://github.com/ansible/ansible/issues/75826)
|
||||
@ -1,2 +0,0 @@
|
||||
removed_features:
|
||||
- Remove deprecated ``Templar.set_available_variables()`` method (https://github.com/ansible/ansible/issues/75828)
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- ansible-galaxy - Add galaxy_collection_skeleton/galaxy_collection_skeleton_ignore configuration options
|
||||
@ -1,2 +0,0 @@
|
||||
minor_changes:
|
||||
- "Start of moving away from using Six, Python 2 and 3 compatibility library (https://github.com/ansible/ansible/pull/75863)"
|
||||
@ -1,3 +0,0 @@
|
||||
major_changes:
|
||||
- Jinja2 Controller Requirement - Jinja2 3.0.0 or newer is required for the control node (the machine that runs Ansible)
|
||||
(https://github.com/ansible/ansible/pull/75881)
|
||||
@ -1,2 +0,0 @@
|
||||
minor_changes:
|
||||
- "ansible-test validate_modules - allow ``choices`` for return values (https://github.com/ansible/ansible/pull/76009)."
|
||||
@ -1,3 +0,0 @@
|
||||
bugfixes:
|
||||
- _run_loop - Add the task name to the warning
|
||||
(https://github.com/ansible/ansible/issues/76011)
|
||||
@ -1,2 +0,0 @@
|
||||
bugfixes:
|
||||
- "Fix task debugger to work with ``run_once`` using ``linear`` strategy (https://github.com/ansible/ansible/issues/76049)"
|
||||
@ -1,3 +0,0 @@
|
||||
bugfixes:
|
||||
- unarchive - Fix zip archive file listing that caused issues with content
|
||||
postprocessing (https://github.com/ansible/ansible/issues/76067).
|
||||
@ -1,3 +0,0 @@
|
||||
bugfixes:
|
||||
- Fix help message for the 'ansible-galaxy collection verify' positional argument.
|
||||
The positional argument must be a collection name (https://github.com/ansible/ansible/issues/76087).
|
||||
@ -1,3 +0,0 @@
|
||||
bugfixes:
|
||||
- hostname - Fix Debian strategy KeyError, use `SystemdStrategy`
|
||||
(https://github.com/ansible/ansible/issues/76124)
|
||||
@ -1,2 +0,0 @@
|
||||
minor_changes:
|
||||
- dnf - add more specific error message for GPG validation (https://github.com/ansible/ansible/issues/76192)
|
||||
@ -1,4 +0,0 @@
|
||||
bugfixes:
|
||||
- >-
|
||||
collection_loader - Implement 'find_spec' and 'exec_module' to override deprecated importlib methods
|
||||
'find_module' and 'load_module' when applicable (https://github.com/ansible/ansible/issues/74660).
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user