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,因为这些名称和 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 之一,则为必需。

notes

字符串

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

port

整数

Consul 代理正在运行的端口。

默认值: 8500

scheme

字符串

Consul 代理正在运行的协议方案。

默认值: "http"

script

字符串

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

需要提供 interval

ttltcphttp 互斥。

service_address

字符串

服务监听的地址。此值将作为 address 参数传递给 Consul 的 /v1/agent/service/register API 方法,因此请参阅 Consul API 文档以获取更多详细信息。

service_id

字符串

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

service_name

字符串

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

service_port

整数

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

state

字符串

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

Choices

  • "present" ← (默认)

  • "absent"

tags

list / elements=string

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

tcp

字符串

在 community.general 1.3.0 中添加

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

需要提供 interval

scriptttlhttp 互斥。

timeout

字符串

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

token

字符串

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

ttl

字符串

可以使用 TTL 而不是 scriptinterval 注册检查,这意味着服务将在 TTL 过期之前与代理签入。如果未签入,则认为检查失败。如果注册检查且缺少脚本和间隔,则这是必需的。与 interval 类似,这是一个带有 sm 后缀的数字,表示秒或分钟的单位,例如 15s1m。如果未提供后缀,则默认使用 s,例如 10 将为 10s

scripttcphttp 互斥。

validate_certs

boolean

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

Choices

  • 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)