community.general.slack 模块 – 发送 Slack 通知

注意

此模块是 community.general 集合 (版本 10.1.0) 的一部分。

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

要安装它,请使用:ansible-galaxy collection install community.general

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

概要

参数

参数

注释

attachments

列表 / 元素=字典

定义附件列表。此列表与 Slack JSON API 相同。

更多信息,请参见 https://api.slack.com/docs/attachments

blocks

列表 / 元素=字典

在 community.general 1.0.0 中添加

定义块列表。此列表与 Slack JSON API 相同。

更多信息,请参见 https://api.slack.com/block-kit

channel

字符串

发送消息的频道。如果缺失,消息将发送到为 token 选择的频道。

color

字符串

允许文本使用默认颜色 - 使用默认值“normal”不发送消息开头的自定义颜色条。

color 的允许值可以是“normal”、“good”、“warning”、“danger”中的一个,或者任何有效的 3 位或 6 位十六进制颜色值。

默认值: "normal"

domain

字符串

您环境的 Slack (子)域名,不含协议。(例如 example.slack.com。)在 Ansible 1.8 及更高版本中,此参数已弃用,可能会被忽略。有关信息,请参见 token 文档。

icon_emoji

字符串

消息发送者的表情符号。有关选项,请参见 Slack 文档。

如果设置了 icon_emoji,则不会使用 icon_url

icon_url

字符串

消息发送者图标的 URL。

默认值: "https://docs.ansible.org.cn/favicon.ico"

整数

msg 中自动创建频道和用户名链接。

选项

  • 1 ← (默认)

  • 0

message_id

字符串

在 community.general 1.2.0 中添加

可选。要编辑的消息 ID,而不是发布新消息。

如果提供 channel 必须为 C0xxxxxxx 格式。使用 {{ slack_response.channel }} 从上一个任务运行中获取 channel

令牌需要历史范围才能获取要编辑的消息信息(channels:history,groups:history,mpim:history,im:history)。

对应于 Slack API 中的 ts (https://api.slack.com/messaging/modifying)。

msg

字符串

要发送的消息。请注意,该模块不处理转义字符。在发送之前,应将纯文本尖括号和&符号转换为 HTML 实体(例如,&转换为 &)。有关更多信息,请参见 Slack 的文档 (https://api.slack.com/docs/message-formatting)。

parse

字符串

Slack 消息解析器的设置

选项

  • "full"

  • "none"

prepend_hash

字符串

在 community.general 6.1.0 中添加

用于在传入的 channel 前自动添加 # 符号的设置。

auto 方法会在前面添加 #,除非 channel#@C0GFG0CP 中的任何一个开头。这些前缀仅涵盖一小部分不应该添加 # 前缀的前缀。由于不知道 channel 值必须不带 # 前缀的确切条件,因此此选项的 auto 值将在未来弃用。最好显式设置 prepend_hash=alwaysprepend_hash=never 以获得所需的行为。

选项

  • "always"

  • "never"

  • "auto" ← (默认)

thread_id

字符串

可选。此消息的父消息的时间戳,用于将此消息加入线程。 https://api.slack.com/docs/message-threading

token

字符串 / 必需

Slack 集成令牌。这将验证您对 Slack 服务的访问权限。请确保根据您使用的方法使用正确的令牌类型。

Webhook 令牌:在 Ansible 1.8 之前,令牌看起来像 3Ffe373sfhRE6y42Fg3rvf4GlK。在 Ansible 1.8 及更高版本中,Ansible 适应新的 Slack API,其中令牌看起来像 G922VJP24/D921DW937/3Ffe373sfhRE6y42Fg3rvf4GlK。如果令牌采用新格式,则 Slack 将忽略任何 domain 值。如果令牌采用旧格式,则需要 domain。Ansible 无法控制 Slack 何时弃用旧 API。当 Slack 弃用旧 API 时,旧格式将停止工作。** 请记住,这些令牌不是 API 令牌,而是 Webhook 令牌。在 Slack 中,这些令牌位于 Webhook URL 中,这些 URL 在应用程序和集成下获得。可以在该区域添加传入 Webhook。在某些情况下,这可能被您的 Slack 管理员锁定,您必须请求访问权限。正是在那里可以添加传入 Webhook。密钥位于该部分给您的 URL 末尾。**

WebAPI 令牌:Slack WebAPI 需要个人、机器人或工作应用程序令牌。这些令牌以 xoxp-xoxb-xoxa- 开头,例如 xoxb-1234-56789abcdefghijklmnop。如果您打算接收 thread_id,则需要 WebAPI 令牌。有关更多信息,请参阅 Slack 的文档 (https://api.slack.com/docs/token-types)。

username

字符串

这是消息的发送者。

默认值: "Ansible"

validate_certs

布尔值

如果为 false,则不会验证 SSL 证书。这仅应在使用自签名证书的个人控制站点上使用。

选项

  • false

  • true ← (默认)

属性

属性

支持

描述

check_mode

支持:完全支持

可以在 check_mode 下运行,并在不修改目标的情况下返回更改状态预测。

diff_mode

支持:不支持

处于 diff 模式时,将返回有关已更改内容(或可能需要在 check_mode 中更改的内容)的详细信息。

示例

- name: Send notification message via Slack
  community.general.slack:
    token: thetoken/generatedby/slack
    msg: '{{ inventory_hostname }} completed'
  delegate_to: localhost

- name: Send notification message via Slack all options
  community.general.slack:
    token: thetoken/generatedby/slack
    msg: '{{ inventory_hostname }} completed'
    channel: '#ansible'
    thread_id: '1539917263.000100'
    username: 'Ansible on {{ inventory_hostname }}'
    icon_url: http://www.example.com/some-image-file.png
    link_names: 0
    parse: 'none'
  delegate_to: localhost

- name: Insert a color bar in front of the message for visibility purposes and use the default webhook icon and name configured in Slack
  community.general.slack:
    token: thetoken/generatedby/slack
    msg: '{{ inventory_hostname }} is alive!'
    color: good
    username: ''
    icon_url: ''

- name: Insert a color bar in front of the message with valid hex color value
  community.general.slack:
    token: thetoken/generatedby/slack
    msg: 'This message uses color in hex value'
    color: '#00aacc'
    username: ''
    icon_url: ''

- name: Use the attachments API
  community.general.slack:
    token: thetoken/generatedby/slack
    attachments:
      - text: Display my system load on host A and B
        color: '#ff00dd'
        title: System load
        fields:
          - title: System A
            value: "load average: 0,74, 0,66, 0,63"
            short: true
          - title: System B
            value: 'load average: 5,16, 4,64, 2,43'
            short: true

- name: Use the blocks API
  community.general.slack:
    token: thetoken/generatedby/slack
    blocks:
      - type: section
        text:
          type: mrkdwn
          text: |-
            *System load*
            Display my system load on host A and B
      - type: context
        elements:
        - type: mrkdwn
          text: |-
            *System A*
            load average: 0,74, 0,66, 0,63
        - type: mrkdwn
          text: |-
            *System B*
            load average: 5,16, 4,64, 2,43

- name: Send a message with a link using Slack markup
  community.general.slack:
    token: thetoken/generatedby/slack
    msg: We sent this message using <https://ansible.org.cn|Ansible>!

- name: Send a message with angle brackets and ampersands
  community.general.slack:
    token: thetoken/generatedby/slack
    msg: This message has &lt;brackets&gt; &amp; ampersands in plain text.

- name: Initial Threaded Slack message
  community.general.slack:
    channel: '#ansible'
    token: xoxb-1234-56789abcdefghijklmnop
    msg: 'Starting a thread with my initial post.'
  register: slack_response
- name: Add more info to thread
  community.general.slack:
    channel: '#ansible'
    token: xoxb-1234-56789abcdefghijklmnop
    thread_id: "{{ slack_response['ts'] }}"
    color: good
    msg: 'And this is my threaded response!'

- name: Send a message to be edited later on
  community.general.slack:
    token: thetoken/generatedby/slack
    channel: '#ansible'
    msg: Deploying something...
  register: slack_response
- name: Edit message
  community.general.slack:
    token: thetoken/generatedby/slack
    # The 'channel' option does not accept the channel name. It must use the 'channel_id',
    # which can be retrieved for example from 'slack_response' from the previous task.
    channel: "{{ slack_response.channel }}"
    msg: Deployment complete!
    message_id: "{{ slack_response.ts }}"

作者

  • Ramon de la Fuente (@ramondelafuente)