diff --git a/.github/BOTMETA.yml b/.github/BOTMETA.yml index 1a778e46fe..8f86d5fe2a 100644 --- a/.github/BOTMETA.yml +++ b/.github/BOTMETA.yml @@ -50,6 +50,8 @@ files: $callbacks/cgroup_memory_recap.py: {} $callbacks/context_demo.py: {} $callbacks/counter_enabled.py: {} + $callbacks/default_without_diff.py: + maintainers: felixfontein $callbacks/dense.py: maintainers: dagwieers $callbacks/diy.py: diff --git a/plugins/callback/default_without_diff.py b/plugins/callback/default_without_diff.py new file mode 100644 index 0000000000..c138cd4455 --- /dev/null +++ b/plugins/callback/default_without_diff.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Felix Fontein +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +DOCUMENTATION = r''' + name: default_without_diff + type: stdout + short_description: The default ansible callback without diff output + version_added: 8.4.0 + description: + - This is basically the default ansible callback plugin (P(ansible.builtin.default#callback)) without + showing diff output. This can be useful when using another callback which sends more detailed information + to another service, like the L(ARA, https://ara.recordsansible.org/) callback, and you want diff output + sent to that plugin but not shown on the console output. + author: Felix Fontein (@felixfontein) + extends_documentation_fragment: + - ansible.builtin.default_callback + - ansible.builtin.result_format_callback +''' + +EXAMPLES = r''' +# Enable callback in ansible.cfg: +ansible_config: | + [defaults] + stdout_callback = community.general.default_without_diff + +# Enable callback with environment variables: +environment_variable: | + ANSIBLE_STDOUT_CALLBACK=community.general.default_without_diff +''' + +from ansible.plugins.callback.default import CallbackModule as Default + + +class CallbackModule(Default): + CALLBACK_VERSION = 2.0 + CALLBACK_TYPE = 'stdout' + CALLBACK_NAME = 'community.general.default_without_diff' + + def v2_on_file_diff(self, result): + pass diff --git a/tests/integration/targets/callback_default_without_diff/aliases b/tests/integration/targets/callback_default_without_diff/aliases new file mode 100644 index 0000000000..3e2dd244c1 --- /dev/null +++ b/tests/integration/targets/callback_default_without_diff/aliases @@ -0,0 +1,6 @@ +# Copyright (c) Ansible Project +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +azp/posix/3 +needs/target/callback diff --git a/tests/integration/targets/callback_default_without_diff/tasks/main.yml b/tests/integration/targets/callback_default_without_diff/tasks/main.yml new file mode 100644 index 0000000000..5fc656e847 --- /dev/null +++ b/tests/integration/targets/callback_default_without_diff/tasks/main.yml @@ -0,0 +1,65 @@ +--- +#################################################################### +# WARNING: These are designed specifically for Ansible tests # +# and should not be used as examples of how to write Ansible roles # +#################################################################### + +# Copyright (c) Ansible Project +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +- block: + - name: Create temporary file + tempfile: + register: tempfile + + - name: Run tests + include_role: + name: callback + vars: + tests: + - name: Basic file diff + environment: + ANSIBLE_NOCOLOR: 'true' + ANSIBLE_FORCE_COLOR: 'false' + ANSIBLE_DIFF_ALWAYS: 'true' + ANSIBLE_PYTHON_INTERPRETER: "{{ ansible_python_interpreter }}" + ANSIBLE_STDOUT_CALLBACK: community.general.default_without_diff + playbook: | + - hosts: testhost + gather_facts: true + tasks: + - name: Create file + copy: + dest: "{{ tempfile.path }}" + content: | + Foo bar + + - name: Modify file + copy: + dest: "{{ tempfile.path }}" + content: | + Foo bar + Bar baz bam! + expected_output: [ + "", + "PLAY [testhost] ****************************************************************", + "", + "TASK [Gathering Facts] *********************************************************", + "ok: [testhost]", + "", + "TASK [Create file] *************************************************************", + "changed: [testhost]", + "", + "TASK [Modify file] *************************************************************", + "changed: [testhost]", + "", + "PLAY RECAP *********************************************************************", + "testhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ", + ] + + always: + - name: Clean up temp file + file: + path: "{{ tempfile.path }}" + state: absent