community.general.consul 模块 – 在 Consul 集群中添加、修改和删除服务

注意

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

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

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

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

概要

  • 注册服务并检查与 Consul 集群的代理。服务是在代理节点上运行的某些进程,应由 Consul 的发现机制进行宣传。它可以选择性地提供检查定义,即定期服务测试以通知 Consul 集群服务的运行状况。

  • 也可以按节点注册检查,例如磁盘使用率或 CPU 使用率,并将整个节点的运行状况通知给集群。服务级别检查不需要检查名称或 ID,因为这些是由 Consul 分别从服务名称和 ID 派生出来的,方法是在后面附加“service:”。节点级别检查需要 check_name,并且可以选择 check_id

  • 目前,没有完整的方法来检索已注册检查的脚本、间隔或 TTL 元数据。如果没有此元数据,则无法判断 Ansible 提供的数据是否代表对检查的更改。因此,这不会尝试确定更改,并且将始终报告发生了更改。计划使用 API 方法来提供此元数据,因此在此阶段将添加更改管理。

  • 有关更多详细信息,请参阅 http://consul.io

需求

执行此模块的主机需要以下需求。

  • python-consul

  • requests

参数

参数

注释

check_host

字符串

主机名。

check_id

字符串

服务检查的 ID。如果 state=absent,则默认为 check_name。如果属于服务定义的一部分,则忽略。

check_name

字符串

服务检查的名称。如果独立存在则为必需,如果属于服务定义的一部分则忽略。

check_node

字符串

节点名称。

host

字符串

Consul 代理的主机,默认为 localhost。

默认值: "localhost"

http

字符串

可以使用 HTTP 端点注册检查。这意味着 Consul 将检查 HTTP 端点是否返回成功的 HTTP 状态。

需要提供 interval

scriptttltcp 互斥。

interval

字符串

将运行服务检查的间隔。这是一个带 sm 后缀的数字,表示秒或分钟的单位,例如 15s1m。如果没有提供后缀,则默认使用 s,例如 10 将是 10s

如果指定了参数scripthttptcp中的一个,则此参数为必填。

注释

字符串

注册检查时要附加的注释。

端口

整数

Consul 代理运行的端口。

默认值: 8500

方案

字符串

Consul 代理运行的协议方案。

默认值: "http"

脚本

字符串

将定期运行以检查服务运行状况的脚本/命令。

需要提供 interval

ttltcphttp互斥。

服务地址

字符串

要公布服务监听的地址。此值将作为address参数传递给Consul的/v1/agent/service/register API方法,因此请参考Consul API文档了解更多详细信息。

服务ID

字符串

服务的ID,每个节点必须唯一。如果state=absent,则默认为提供的服务名称。

服务名称

字符串

节点上服务的唯一名称,每个节点必须唯一,注册服务时必填。如果注册节点级检查,则可以省略。

服务端口

整数

服务监听的端口。可以选择性地提供用于注册服务,即如果设置了service_nameservice_id

状态

字符串

注册或注销Consul服务,默认为present。

选项

  • "present" ← (默认)

  • "absent"

标签

列表 / 元素=字符串

将附加到服务注册的标签。

TCP

字符串

在community.general 1.3.0中添加

可以使用TCP端口注册检查。这意味着Consul将检查对该端口的连接尝试是否成功(即,该端口当前正在接受连接)。格式为host:port,例如localhost:80

需要提供 interval

scriptttlhttp互斥。

超时

字符串

自定义HTTP检查超时。Consul默认值为10秒。与interval类似,这是一个带有sm后缀的数字,用于表示秒或分钟的单位,例如15s1m。如果没有提供后缀,则默认使用s,例如10将为10s

令牌

字符串

标识ACL规则集的令牌密钥。可能需要注册服务。

TTL

字符串

可以使用TTL注册检查,而不是scriptinterval,这意味着服务将在TTL过期前向代理程序进行检查。如果没有,则检查将被认为失败。如果注册检查并且缺少脚本和interval,则需要此参数。与interval类似,这是一个带有sm后缀的数字,用于表示秒或分钟的单位,例如15s1m。如果没有提供后缀,则默认使用s,例如10将为10s

scripttcphttp互斥。

验证证书

布尔值

是否验证Consul代理的TLS证书。

选项

  • false

  • true ← (默认)

属性

属性

支持

描述

check_mode

支持:不支持

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

diff_mode

支持:不支持

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

示例

- name: Register nginx service with the local consul agent
  community.general.consul:
    service_name: nginx
    service_port: 80

- name: Register nginx service with curl check
  community.general.consul:
    service_name: nginx
    service_port: 80
    script: curl https://127.0.0.1
    interval: 60s

- name: register nginx with a tcp check
  community.general.consul:
    service_name: nginx
    service_port: 80
    interval: 60s
    tcp: localhost:80

- name: Register nginx with an http check
  community.general.consul:
    service_name: nginx
    service_port: 80
    interval: 60s
    http: https://127.0.0.1:80/status

- name: Register external service nginx available at 10.1.5.23
  community.general.consul:
    service_name: nginx
    service_port: 80
    service_address: 10.1.5.23

- name: Register nginx with some service tags
  community.general.consul:
    service_name: nginx
    service_port: 80
    tags:
      - prod
      - webservers

- name: Remove nginx service
  community.general.consul:
    service_name: nginx
    state: absent

- name: Register celery worker service
  community.general.consul:
    service_name: celery-worker
    tags:
      - prod
      - worker

- name: Create a node level check to test disk usage
  community.general.consul:
    check_name: Disk usage
    check_id: disk_usage
    script: /opt/disk_usage.py
    interval: 5m

- name: Register an http check against a service that's already registered
  community.general.consul:
    check_name: nginx-check2
    check_id: nginx-check2
    service_id: nginx
    interval: 60s
    http: https://127.0.0.1:80/morestatus

作者

  • Steve Gargan (@sgargan)