community.dns.hetzner_dns_record_set 模块 – 在 Hetzner DNS 服务中添加或删除记录集

注意

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

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

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

要在 playbook 中使用它,请指定:community.dns.hetzner_dns_record_set

community.dns 2.0.0 中的新增功能

概要

  • 在 Hetzner DNS 服务中创建和删除 DNS 记录集。

参数

参数

注释

bulk_operation_threshold

整数

确定何时开始使用批量操作的阈值。

默认值 2 表示,如果计划执行 2 个或更多同种操作,并且 API 支持这种操作类型的批量操作,则将使用它们。

默认值: 2

hetzner_token

别名:api_token

字符串 / 必需

Hetzner API 的令牌。

如果未提供,将从环境变量 HETZNER_DNS_TOKEN 中读取。

on_existing

字符串

如果记录集已存在,但与指定的记录集不同,则此选项定义行为。对于此比较,valuettl 用于类型为 type 且与 prefixrecord 匹配的所有记录。

如果设置为 replace,则记录将被更新(state=present)或删除(state=absent)。这是旧的 overwrite=true 行为。

如果设置为 keep_and_fail,模块将失败,并且不会修改记录。这是旧的 overwrite=false 行为,如果 state=present

如果设置为 keep_and_warn,模块将发出警告,并且不会修改记录。

如果设置为 keep,模块将不会修改记录。这是旧的 overwrite=false 行为,如果 state=absent

如果 state=absent 且该值不是 replace,则必须指定 value

选项

  • "replace" ←(默认)

  • "keep_and_fail"

  • "keep_and_warn"

  • "keep"

prefix

字符串

在 community.dns 0.2.0 中添加

DNS 记录的前缀。

这是 recordzone_name 之前的 部分。例如,如果要修改的记录是 example.com 区域的 www.example.com,则前缀为 www。如果此示例中的记录为 example.com,则前缀将为 ''(空字符串)。

recordprefix 中必须指定一个。

record

字符串

要创建或删除的完整 DNS 记录。

recordprefix 中必须指定一个。

state

字符串 / 必需

指定资源记录的状态。

选项

  • "present"

  • "absent"

ttl

整数

新记录的 TTL(以秒为单位)。

txt_character_encoding

字符串

在 community.dns 2.5.0 中添加。

是否将数字转义序列 (\xyz) 视为八进制或十进制数。这仅在 txt_transformation=quoted 时使用。

默认值在 community.dns 3.0.0 中更改为 decimal。之前,默认值是 octaldecimal 值与 RFC 1035 兼容。

选项

  • "decimal" ← (默认)

  • "octal"

txt_transformation

字符串

确定如何在 API 和此模块的输入和输出之间转换 TXT 条目值。

api 表示从该模块返回的值与 API 返回的值相同,并以传递给该模块的方式推送到 API。对于幂等性检查,输入字符串将与 API 返回的字符串进行比较。API 可能会自动转换某些值,例如拆分长值或添加引号,这可能会导致幂等性问题。

unquoted 会自动转换值,以便您可以传入未加引号的值,并且该模块将返回未加引号的值。如果您传入加引号的值,它们将被双引号引起来。

quoted 会自动转换值,因此您必须对包含空格、引号和反斜杠等字符且长度超过 255 字节的值使用引号。它还可以确保以规范化的编码返回 API 中的值。

默认值 unquoted 可确保您可以处理值,而无需关心如何为 DNS 正确加引号。大多数用户应该使用 unquotedquoted 中的一个,而不是 api

注意:转换代码假定值的编码为 UTF-8。如果需要其他编码,请使用 txt_transformation=api 并自行处理编码。

选项

  • "api"

  • "quoted"

  • "unquoted" ← (默认)

type

字符串 / 必需

要创建或删除的 DNS 记录类型。

选项

  • "A"

  • "AAAA"

  • "CAA"

  • "CNAME"

  • "DANE"

  • "DS"

  • "HINFO"

  • "MX"

  • "NS"

  • "RP"

  • "SOA"

  • "SRV"

  • "TLSA"

  • "TXT"

value

list / elements=string

创建 DNS 记录时的新值。

允许使用 YAML 列表或多个逗号分隔的值。

删除记录时,必须指定该记录的所有值,否则将不会删除该记录。

如果 state=present 或者当 on_existing 不是 replace 时,必须指定此项。

如果 state=absent 并且 on_existing=replace,则将忽略此项。

zone_id

字符串

在 community.dns 0.2.0 中添加

要修改的 DNS 区域的 ID。

zone_namezone_id 中必须指定一个。

zone_name

别名: zone

字符串

要修改的 DNS 区域。

zone_namezone_id 中必须指定一个。

属性

属性

支持

描述

action_group

操作组: community.dns.hetzner

在 community.dns 2.4.0 中添加

module_defaults 中使用 group/community.dns.hetzner 为此模块设置默认值。

check_mode

支持: full

可以在 check_mode 中运行,并返回更改状态预测,而无需修改目标。

diff_mode

支持: full

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

注释

注意

  • 对于 CNAME 记录,请使用值的绝对 DNS 名称。绝对 DNS 名称以尾随句点 . 结尾,例如 foo.example.com.。如果您使用不带尾随句点的相对 DNS 名称,则该值将相对于 CNAME 记录的区域。

示例

- name: Add new.foo.com as an A record with 3 IPs
  community.dns.hetzner_dns_record_set:
    state: present
    zone: foo.com
    record: new.foo.com
    type: A
    ttl: 7200
    value: 1.1.1.1,2.2.2.2,3.3.3.3
    hetzner_token: access_token

- name: Update new.foo.com as an A record with a list of 3 IPs
  community.dns.hetzner_dns_record_set:
    state: present
    zone: foo.com
    record: new.foo.com
    type: A
    ttl: 7200
    value:
      - 1.1.1.1
      - 2.2.2.2
      - 3.3.3.3
    hetzner_token: access_token

- name: Retrieve the details for new.foo.com
  community.dns.hetzner_dns_record_set_info:
    zone: foo.com
    record: new.foo.com
    type: A
    hetzner_token: access_token
  register: rec

- name: Delete new.foo.com A record using the results from the facts retrieval command
  community.dns.hetzner_dns_record_set:
    state: absent
    zone: foo.com
    record: "{{ rec.set.record }}"
    ttl: "{{ rec.set.ttl }}"
    type: "{{ rec.set.type }}"
    value: "{{ rec.set.value }}"
    hetzner_token: access_token

- name: Add an AAAA record
  # Note that because there are colons in the value that the IPv6 address must be quoted!
  community.dns.hetzner_dns_record_set:
    state: present
    zone: foo.com
    record: localhost.foo.com
    type: AAAA
    ttl: 7200
    value: "::1"
    hetzner_token: access_token

- name: Add a TXT record
  community.dns.hetzner_dns_record_set:
    state: present
    zone: foo.com
    record: localhost.foo.com
    type: TXT
    ttl: 7200
    value: 'bar'
    hetzner_token: access_token

- name: Remove the TXT record
  community.dns.hetzner_dns_record_set:
    state: absent
    zone: foo.com
    record: localhost.foo.com
    type: TXT
    ttl: 7200
    value: 'bar'
    hetzner_token: access_token

- name: Add a CAA record
  community.dns.hetzner_dns_record_set:
    state: present
    zone: foo.com
    record: foo.com
    type: CAA
    value:
    - '128 issue "letsencrypt.org"'
    - '128 iodef "mailto:[email protected]"'
    hetzner_token: access_token

- name: Add an MX record
  community.dns.hetzner_dns_record_set:
    state: present
    zone: foo.com
    record: foo.com
    type: MX
    ttl: 3600
    value:
    - "10 mail.foo.com"
    hetzner_token: access_token

- name: Add a CNAME record
  community.dns.hetzner_dns_record_set:
    state: present
    zone: bla.foo.com
    record: foo.com
    type: CNAME
    ttl: 3600
    value:
    - foo.foo.com
    hetzner_token: access_token

- name: Add a PTR record
  community.dns.hetzner_dns_record_set:
    state: present
    zone: foo.foo.com
    record: foo.com
    type: PTR
    ttl: 3600
    value:
    - foo.foo.com
    hetzner_token: access_token

- name: Add an SPF record
  community.dns.hetzner_dns_record_set:
    state: present
    zone: foo.com
    record: foo.com
    type: SPF
    ttl: 3600
    value:
    - "v=spf1 a mx ~all"
    hetzner_token: access_token

- name: Add a PTR record
  community.dns.hetzner_dns_record_set:
    state: present
    zone: foo.com
    record: foo.com
    type: PTR
    ttl: 3600
    value:
    - "10 100 3333 service.foo.com"
    hetzner_token: access_token

返回值

此处记录了常见的返回值 这里,以下是此模块特有的字段

描述

zone_id

字符串

区域的 ID。

返回: 成功

示例: "23"

作者

  • Markus Bergholz (@markuman)

  • Felix Fontein (@felixfontein)