community.general.diy 回调 – 自定义输出

注意

此回调插件是 community.general 集合 (版本 10.1.0) 的一部分。

如果您使用的是 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用: ansible-galaxy collection install community.general。您需要其他要求才能使用此回调插件,请参阅 要求 获取详细信息。

要在 playbook 中使用它,请指定: community.general.diy

community.general 0.2.0 中的新增功能

回调插件

此插件是一个 **标准输出回调**。一次只能使用一个标准输出回调。但是,可以启用其他聚合或通知回调。有关回调插件的更多信息,请参见 回调插件

概要

  • 允许您提供自己的自定义回调模板进行输出的回调插件。

要求

以下要求是在执行此回调的本地控制器节点上所需的。

  • 在配置中设置为 stdout_callback

参数

参数

注释

check_mode_markers

布尔值

在 Ansible 2.9 中添加

切换以控制在检查模式下显示标记。

标记是在 playbook 执行开始和结束时(当调用 ansible-playbook --check)的 DRY RUN 和在检查模式下运行的每个 play 和任务的结尾处的 CHECK MODE

选项

  • false ← (默认)

  • true

配置

display_failed_stderr

布尔值

在 Ansible 2.7 中添加

切换以控制是否将失败和不可达的任务显示到 STDERR(与 STDOUT 相比)

选项

  • false ← (默认)

  • true

配置

display_ok_hosts

布尔值

在 Ansible 2.7 中添加

切换以控制在任务中显示“ok”任务/主机结果

选项

  • false

  • true ← (默认)

配置

display_skipped_hosts

布尔值

切换以控制在任务中显示跳过的任务/主机结果

选项

  • false

  • true ← (默认)

配置

on_any_msg

字符串

用于 on_any 回调的输出。

配置

on_any_msg_color

字符串

用于 on_any_msg 的输出颜色。

模板应呈现 有效的颜色值

配置

on_file_diff_msg

字符串

用于 on_file_diff 回调的输出。

配置

on_file_diff_msg_color

字符串

用于on_file_diff_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_handler_task_start_msg

字符串

用于回调 playbook_on_handler_task_start 的输出。

配置

playbook_on_handler_task_start_msg_color

字符串

用于playbook_on_handler_task_start_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_include_msg

字符串

用于回调 playbook_on_include 的输出。

配置

playbook_on_include_msg_color

字符串

用于playbook_on_include_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_no_hosts_matched_msg

字符串

用于回调 playbook_on_no_hosts_matched 的输出。

配置

playbook_on_no_hosts_matched_msg_color

字符串

用于playbook_on_no_hosts_matched_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_no_hosts_remaining_msg

字符串

用于回调 playbook_on_no_hosts_remaining 的输出。

配置

playbook_on_no_hosts_remaining_msg_color

字符串

用于playbook_on_no_hosts_remaining_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_notify_msg

字符串

用于回调 playbook_on_notify 的输出。

配置

playbook_on_notify_msg_color

字符串

用于playbook_on_notify_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_play_start_msg

字符串

用于回调 playbook_on_play_start 的输出。

配置

playbook_on_play_start_msg_color

字符串

用于playbook_on_play_start_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_setup_msg

字符串

用于回调 playbook_on_setup 的输出。

配置

playbook_on_setup_msg_color

字符串

用于playbook_on_setup_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_start_msg

字符串

用于回调 playbook_on_start 的输出。

配置

playbook_on_start_msg_color

字符串

用于playbook_on_start_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_stats_msg

字符串

用于回调 playbook_on_stats 的输出。

配置

playbook_on_stats_msg_color

字符串

用于playbook_on_stats_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_task_start_msg

字符串

用于回调 playbook_on_task_start 的输出。

配置

playbook_on_task_start_msg_color

字符串

用于playbook_on_task_start_msg的输出颜色。

模板应呈现 有效的颜色值

配置

playbook_on_vars_prompt_msg

字符串

用于回调 playbook_on_vars_prompt 的输出。

配置

playbook_on_vars_prompt_msg_color

字符串

用于playbook_on_vars_prompt_msg的输出颜色。

模板应呈现 有效的颜色值

配置

runner_item_on_failed_msg

字符串

用于回调 runner_item_on_failed 的输出。

配置

runner_item_on_failed_msg_color

字符串

用于runner_item_on_failed_msg的输出颜色。

模板应呈现 有效的颜色值

配置

runner_item_on_ok_msg

字符串

用于回调 runner_item_on_ok 的输出。

配置

runner_item_on_ok_msg_color

字符串

用于runner_item_on_ok_msg的输出颜色。

模板应呈现 有效的颜色值

配置

runner_item_on_skipped_msg

字符串

用于回调 runner_item_on_skipped 的输出。

配置

runner_item_on_skipped_msg_color

字符串

用于 runner_item_on_skipped_msg 的输出颜色。

模板应呈现 有效的颜色值

配置

runner_on_failed_msg

字符串

用于回调 runner_on_failed 的输出。

配置

runner_on_failed_msg_color

字符串

用于 runner_on_failed_msg 的输出颜色。

模板应呈现 有效的颜色值

配置

runner_on_no_hosts_msg

字符串

用于回调 runner_on_no_hosts 的输出。

配置

runner_on_no_hosts_msg_color

字符串

用于 runner_on_no_hosts_msg 的输出颜色。

模板应呈现 有效的颜色值

配置

runner_on_ok_msg

字符串

用于回调 runner_on_ok 的输出。

配置

runner_on_ok_msg_color

字符串

用于 runner_on_ok_msg 的输出颜色。

模板应呈现 有效的颜色值

配置

runner_on_skipped_msg

字符串

用于回调 runner_on_skipped 的输出。

配置

runner_on_skipped_msg_color

字符串

用于 runner_on_skipped_msg 的输出颜色。

模板应呈现 有效的颜色值

配置

runner_on_start_msg

字符串

用于回调 runner_on_start 的输出。

配置

runner_on_start_msg_color

字符串

用于 runner_on_start_msg 的输出颜色。

模板应呈现 有效的颜色值

配置

runner_on_unreachable_msg

字符串

用于回调 runner_on_unreachable 的输出。

配置

runner_on_unreachable_msg_color

字符串

用于 runner_on_unreachable_msg 的输出颜色。

模板应呈现 有效的颜色值

配置

runner_retry_msg

字符串

用于回调 runner_retry 的输出。

配置

runner_retry_msg_color

字符串

用于 runner_retry_msg 的输出颜色。

模板应呈现 有效的颜色值

配置

show_custom_stats

布尔值

这会将通过 set_stats 插件设置的自定义统计信息添加到剧本总结中。

选项

  • false ← (默认)

  • true

配置

show_per_host_start

布尔值

在 Ansible 2.9 中添加

这会添加显示每个主机任务何时开始执行的输出。

选项

  • false ← (默认)

  • true

配置

show_task_path_on_failure

布尔值

ansible-core 2.11 版本新增

当任务失败时,显示包含失败任务的文件路径和行号。使用 -vv 或更高详细程度运行时,此信息会自动显示每个任务。

选项

  • false ← (默认)

  • true

配置

备注

注意

  • 当未提供自定义回调 message(msg) 时,使用 ansible.builtin.default 回调插件输出。

  • 通过 ansible_callback_diy 字典提供回调事件数据,该字典可在选项的模板化上下文中使用。该字典仅在选项的模板化上下文中可用。它不是通过其他各种执行上下文(例如剧本、场景、任务等)可用的变量。

  • 通过各自变量输入设置的选项,只有在变量在对相应回调可用的上下文中设置的情况下,才能使用该变量设置。使用 ansible_callback_diy 字典查看回调可用的内容。此外,ansible_callback_diy.top_level_var_names 将输出回调可用的顶级变量名称。

  • 每个选项值在评估之前都作为模板呈现。这允许动态使用选项。例如,"{{ 'yellow' if ansible_callback_diy.result.is_changed else 'bright green' }}"

  • 所有 msg 选项的**条件**:如果值 is None or omit,则不使用该选项。**效果**:使用 default 回调插件进行输出。

  • 所有 msg 选项的**条件**:如果值 is not None and not omit and length is not greater than 0,则使用该选项但不输出。**效果**:抑制输出。

  • 所有 msg 选项的**条件**:如果值 is not None and not omit and length is greater than 0,则使用该选项并输出。**效果**:将值呈现为模板并输出。

  • 有效的颜色值:blackbright graybluewhitegreenbright bluecyanbright greenredbright cyanpurplebright redyellowbright purpledark graybright yellowmagentabright magentanormal

参见

参见

default – 默认 Ansible 屏幕输出

关于default回调插件的官方文档。

示例

ansible.cfg: >
  # Enable plugin
  [defaults]
  stdout_callback=community.general.diy

  [callback_diy]
  # Output when playbook starts
  playbook_on_start_msg="DIY output(via ansible.cfg): playbook example: {{ ansible_callback_diy.playbook.file_name }}"
  playbook_on_start_msg_color=yellow

  # Comment out to allow default plugin output
  # playbook_on_play_start_msg="PLAY: starting play {{ ansible_callback_diy.play.name }}"

  # Accept on_skipped_msg or ansible_callback_diy_runner_on_skipped_msg as input vars
  # If neither are supplied, omit the option
  runner_on_skipped_msg="{{ on_skipped_msg | default(ansible_callback_diy_runner_on_skipped_msg) | default(omit) }}"

  # Newline after every callback
  # on_any_msg='{{ " " | join("\n") }}'

playbook.yml: >
  ---
  - name: "Default plugin output: play example"
    hosts: localhost
    gather_facts: false
    tasks:
      - name:  Default plugin output
        ansible.builtin.debug:
          msg: default plugin output

  - name: Override from play vars
    hosts: localhost
    gather_facts: false
    vars:
      ansible_connection: local
      green: "\e[0m\e[38;5;82m"
      yellow: "\e[0m\e[38;5;11m"
      bright_purple: "\e[0m\e[38;5;105m"
      cyan: "\e[0m\e[38;5;51m"
      green_bg_black_fg: "\e[0m\e[48;5;40m\e[38;5;232m"
      yellow_bg_black_fg: "\e[0m\e[48;5;226m\e[38;5;232m"
      purple_bg_white_fg: "\e[0m\e[48;5;57m\e[38;5;255m"
      cyan_bg_black_fg: "\e[0m\e[48;5;87m\e[38;5;232m"
      magenta: "\e[38;5;198m"
      white: "\e[0m\e[38;5;255m"
      ansible_callback_diy_playbook_on_play_start_msg: "\n{{green}}DIY output(via play vars): play example: {{magenta}}{{ansible_callback_diy.play.name}}\n\n"
      ansible_callback_diy_playbook_on_task_start_msg: "DIY output(via play vars): task example: {{ ansible_callback_diy.task.name }}"
      ansible_callback_diy_playbook_on_task_start_msg_color: cyan
      ansible_callback_diy_playbook_on_stats_msg: |+2
                CUSTOM STATS
        ==============================
        {% for key in ansible_callback_diy.stats | sort %}
        {% if ansible_callback_diy.stats[key] %}
        {% if key == 'ok' %}
        {% set color_one = lookup('vars','green_bg_black_fg') %}
        {% set prefix = '      ' %}
        {% set suffix = '     ' %}
        {% set color_two = lookup('vars','green') %}
        {% elif key == 'changed' %}
        {% set color_one = lookup('vars','yellow_bg_black_fg') %}
        {% set prefix = '   ' %}
        {% set suffix = '   ' %}
        {% set color_two = lookup('vars','yellow') %}
        {% elif key == 'processed' %}
        {% set color_one = lookup('vars','purple_bg_white_fg') %}
        {% set prefix = '  ' %}
        {% set suffix = '  ' %}
        {% set color_two = lookup('vars','bright_purple') %}
        {% elif key == 'skipped' %}
        {% set color_one = lookup('vars','cyan_bg_black_fg') %}
        {% set prefix = '   ' %}
        {% set suffix = '   ' %}
        {% set color_two = lookup('vars','cyan') %}
        {% else %}
        {% set color_one = "" %}
        {% set prefix = "" %}
        {% set suffix = "" %}
        {% set color_two = "" %}
        {% endif %}
        {{ color_one }}{{ "%s%s%s" | format(prefix,key,suffix) }}{{ color_two }}: {{ ansible_callback_diy.stats[key] | to_nice_yaml }}
        {% endif %}
        {% endfor %}

    tasks:
      - name: Custom banner with default plugin result output
        ansible.builtin.debug:
          msg: "default plugin output: result example"

      - name: Override from task vars
        ansible.builtin.debug:
          msg: "example {{ two }}"
        changed_when: true
        vars:
          white_fg_red_bg: "\e[0m\e[48;5;1m"
          two: "{{ white_fg_red_bg }}    2    "
          ansible_callback_diy_playbook_on_task_start_msg: "\nDIY output(via task vars): task example: {{ ansible_callback_diy.task.name }}"
          ansible_callback_diy_playbook_on_task_start_msg_color: bright magenta
          ansible_callback_diy_runner_on_ok_msg: "DIY output(via task vars): result example: \n{{ ansible_callback_diy.result.output.msg }}\n"
          ansible_callback_diy_runner_on_ok_msg_color: "{{ 'yellow' if ansible_callback_diy.result.is_changed else 'bright green' }}"

      - name: Suppress output
        ansible.builtin.debug:
          msg: i should not be displayed
        vars:
          ansible_callback_diy_playbook_on_task_start_msg: ""
          ansible_callback_diy_runner_on_ok_msg: ""

      - name: Using alias vars (see ansible.cfg)
        ansible.builtin.debug:
          msg:
        when: false
        vars:
          ansible_callback_diy_playbook_on_task_start_msg: ""
          on_skipped_msg: "DIY output(via task vars): skipped example:\n\e[0m\e[38;5;4m\u25b6\u25b6 {{ ansible_callback_diy.result.task.name }}\n"
          on_skipped_msg_color: white

      - name: Just stdout
        ansible.builtin.command: echo some stdout
        vars:
          ansible_callback_diy_playbook_on_task_start_msg: "\n"
          ansible_callback_diy_runner_on_ok_msg: "{{ ansible_callback_diy.result.output.stdout }}\n"

      - name: Multiline output
        ansible.builtin.debug:
          msg: "{{ multiline }}"
        vars:
          ansible_callback_diy_playbook_on_task_start_msg: "\nDIY output(via task vars): task example: {{ ansible_callback_diy.task.name }}"
          multiline: "line\nline\nline"
          ansible_callback_diy_runner_on_ok_msg: |+2
            some
            {{ ansible_callback_diy.result.output.msg }}
            output

          ansible_callback_diy_playbook_on_task_start_msg_color: bright blue

      - name: Indentation
        ansible.builtin.debug:
          msg: "{{ item.msg }}"
        with_items:
          - { indent: 1, msg: one., color: red }
          - { indent: 2, msg: two.., color: yellow }
          - { indent: 3, msg: three..., color: bright yellow }
        vars:
          ansible_callback_diy_runner_item_on_ok_msg: "{{ ansible_callback_diy.result.output.msg | indent(item.indent, True) }}"
          ansible_callback_diy_runner_item_on_ok_msg_color: "{{ item.color }}"
          ansible_callback_diy_runner_on_ok_msg: "GO!!!"
          ansible_callback_diy_runner_on_ok_msg_color: bright green

      - name: Using lookup and template as file
        ansible.builtin.shell: "echo {% raw %}'output from {{ file_name }}'{% endraw %} > {{ file_name }}"
        vars:
          ansible_callback_diy_playbook_on_task_start_msg: "\nDIY output(via task vars): task example: {{ ansible_callback_diy.task.name }}"
          file_name: diy_file_template_example
          ansible_callback_diy_runner_on_ok_msg: "{{ lookup('template', file_name) }}"

      - name: 'Look at top level vars available to the "runner_on_ok" callback'
        ansible.builtin.debug:
          msg: ''
        vars:
          ansible_callback_diy_playbook_on_task_start_msg: "\nDIY output(via task vars): task example: {{ ansible_callback_diy.task.name }}"
          ansible_callback_diy_runner_on_ok_msg: |+2
            {% for var in (ansible_callback_diy.top_level_var_names|reject('match','vars|ansible_callback_diy.*')) | sort %}
            {{ green }}{{ var }}:
              {{ white }}{{ lookup('vars', var) }}

            {% endfor %}
          ansible_callback_diy_runner_on_ok_msg_color: white

      - name: 'Look at event data available to the "runner_on_ok" callback'
        ansible.builtin.debug:
          msg: ''
        vars:
          ansible_callback_diy_playbook_on_task_start_msg: "\nDIY output(via task vars): task example: {{ ansible_callback_diy.task.name }}"
          ansible_callback_diy_runner_on_ok_msg: |+2
            {% for key in ansible_callback_diy | sort %}
            {{ green }}{{ key }}:
              {{ white }}{{ ansible_callback_diy[key] }}

            {% endfor %}

作者

  • Trevor Highfill (@theque5t)

提示

每个条目类型的配置项具有从低到高的优先级顺序。例如,列表中靠后的变量会覆盖靠前的变量。