跳转到: 导航, 搜索

Designate/蓝图/记录集

本提案是 designate v2 的更新记录集。

提案 1

我们将只有记录,没有记录集,无论是显式的(如 designate v2 当前的情况)还是隐式的(如 designate v1 当前的情况)。TTL 的检查在创建/更新时完成。

创建记录

/zones/<zone_id>/records

示例请求:POST /zones/89acac79-38e7-497d-807c-a011e1310438/records

 Host: example.com
 Accept: application/json
 Content-Type: application/json
 {
     "name": "www.example.com.",
     "type": "A",
     "data": "192.0.2.3"
     "TTL": 200
 }

当创建记录时,它将根据 domain_id、name 和 type 获取记录。如果不存在,则创建它。如果存在一个或多个,则所有 TTL 应该相同。如果不是,则返回错误。错误详细信息将包括当前记录或当前记录的 TTL。

当没有记录已经存在,并且如果 2 个用户同时尝试创建具有相同类型和名称的记录时,第一个记录将被按原样添加。第二个记录被检查 TTL,如果不同,则返回错误。错误详细信息将包括当前记录或当前记录的 TTL。

修改记录

/zones/<zone_id>/records/<record_id>

示例请求:PATCH /zones/89acac79-38e7-497d-807c-a011e1310438/records/2e32e609-3a4f-45ba-bdef-e50eacd345ad

 Host: example.com
 Accept: application/json
 Content-Type: application/json
 {
     "name": "www.example.com.",
     "type": "A",
     "data": "192.0.2.5"
     "TTL":500
 }

当修改记录时 - TTL 值将与基于 domain_id、新名称和类型的现有记录进行检查。如果 TTL 不相同,则返回错误。错误详细信息将包括当前记录或当前记录的 TTL。

为了修改具有相同名称和类型的记录的所有 TTL,我们可以在 json body 中有一个新的字段,称为“modify-rrset”。如果设置为 TRUE,则修改与旧名称和旧类型匹配的所有记录。或者,我们可以有一个参数,例如 ?modify-rrset。如果设置为 TRUE,则修改与旧名称和旧类型匹配的所有记录。

如果我们有 2 个 A 记录

   2e32e609-3a4f-45ba-bdef-e50eacd345ad    www.example.com   A  192.0.2.5   200seconds
   3e32e609-3a4f-45ba-bdef-e50eacd345ae    www.example.com   A  192.0.2.6   200seconds

要修改这些记录的 TTL,我们将向以下记录之一发送以下请求

示例请求:PATCH /zones/89acac79-38e7-497d-807c-a011e1310438/records/2e32e609-3a4f-45ba-bdef-e50eacd345ad?modify-rrset=true

 Host: example.com
 Accept: application/json
 Content-Type: application/json
 {
     "ttl": 500
 }

或者,请求可以是如下所示

示例请求:PATCH /zones/89acac79-38e7-497d-807c-a011e1310438/records/2e32e609-3a4f-45ba-bdef-e50eacd345ad

 Host: example.com
 Accept: application/json
 Content-Type: application/json
 {
     "ttl": 500,
     "modify-rrset": true
 }

在此请求处理后,2 个 A 记录将如下所示

   2e32e609-3a4f-45ba-bdef-e50eacd345ad    www.example.com   A  192.0.2.5 500seconds
   3e32e609-3a4f-45ba-bdef-e50eacd345ae    www.example.com   A  192.0.2.6 500seconds

提案 2

提案 - 隐式处理 TTL

本提案将完全隐藏记录集的概念,并隐式处理记录集中不同的 TTL。不要做任何特殊的事情,像 BIND 那样处理记录集中具有不同 TTL 的记录。BIND 将使用最低记录的 TTL 发送记录集。因此,需要更改的是让 mini-DNS 以这种方式处理它。

例如,BIND 中的主服务器在其区域中具有以下条目

   ttltest1	600	A	192.168.0.250
   ttltest1	1200	A	192.168.0.251

辅助从服务器将显示

   $TTL 600        ; 10 minutes
   ttltest1                A       192.168.0.250
                           A       192.168.0.251

我们需要为用户记录这种行为,但不需要额外的 API 更改。

提案 3

记录/记录集重新设计方案 2

本提案是更改 designate v2 中创建记录集和记录的方式。它不是完整的规范。它仅用于演示概念。

将只有一个资源名称,即记录或记录集。我们可以决定保留哪个。因此,您看到的所有“records”都可以更改为“recordsets”,如果这样不那么令人困惑的话。

创建记录

/zones/<zone_id>/records

  {
     "name": "example.com.",
     "type": "A",
     "data": "192.0.2.3"
   }

创建记录时,它将检查是否具有相同名称和类型的记录存在。如果不存在,则正常创建新记录。如果找到匹配项,则将记录的数据添加到关联的数据表中。(有关更多信息,请参见下面的表描述)。

返回显示如下

   {
       "name": "example.com",
       "type": "A:,
       "ttl": 3600,
       "data": {
           "0.0.0.1"
           "0.0.0.2"
        },
       "created_at": datestamp,
       "updated_at": null
   }

修改记录

需要一个 PUT 和一个 PATCH。

/zones/<zone_id>/records/<record_id>

示例请求

PATCH /zones/89acac79-38e7-497d-807c-a011e1310438/records/2e32e609-3a4f-45ba-bdef-e50eacd345ad Host: example.com Accept: application/json Content-Type: application/json

   {
     "data": "192.0.2.5"
   }

这将添加新的 IP 地址到现有的地址。

示例请求:PUT /zones/89acac79-38e7-497d-807c-a011e1310438/records/2e32e609-3a4f-45ba-bdef-e50eacd345ad

Host: example.com Accept: application/json Content-Type: application/json

   {
     "data": "192.0.2.5",
     "data": "192.0.2.6"
   }

这将用新的数据替换所有现有数据。

删除记录

将删除整个记录,包括所有数据。

提案 4

保留记录集,放弃记录

创建记录集

POST /zones/<zone_id>/recordsets

请求

 {
   "name": "example.com.",
   "type": "A",
   "records": [
     "192.0.2.1",
     "192.0.2.2"
   ]
 }

响应

 {
   "name": "example.com.",
   "type": "A",
   "records": [
     "192.0.2.1",
     "192.0.2.2"
   ],
   ....,
   "created_at": datestamp,
   "updated_at": null
 }

修改记录集 / 添加记录

PATCH /zones/<zone_id>/recordsets/<recordset_id>

预先存在的 RRSet 有 "192.0.2.1", "192.0.2.2"

请求(标准)

 {
   "records": [
     "192.0.2.1",
     "192.0.2.2",
     "192.0.2.3"
   ]
 }

请求(JSON Patch / RFC6902‎)

 {
   "op": "add", "path": "/records", "value": "192.0.2.3"
 }

响应

 {
   "name": "example.com.",
   "type": "A",
   "records": [
     "192.0.2.1",
     "192.0.2.2",
     "192.0.2.3"
   ],
   ....,
   "created_at": datestamp,
   "updated_at": datestamp
 }

删除记录

PATCH /zones/<zone_id>/recordsets/<recordset_id>

预先存在的 RRSet 有 "192.0.2.1", "192.0.2.2", "192.0.2.3"

请求(标准)

 {
   "records": [
     "192.0.2.1",
     "192.0.2.2"
   ]
 }

请求(JSON Patch / RFC6902‎)

 {
   "op": "remove", "path": "/records", "value": "192.0.2.3"
 }

响应

 {
   "name": "example.com.",
   "type": "A",
   "records": [
     "192.0.2.1",
     "192.0.2.2"
   ],
   ....,
   "created_at": datestamp,
   "updated_at": datestamp
 }

删除记录集

DELETE /zones/<zone_id>/recordsets/<recordset_id>

请求

 EMPTY

响应

 EMPTY