本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode
服务器池 API¶
https://blueprints.launchpad.net/designate/+spec/server-pools-api
本文档概述了服务器池所需的 API 变更。它是描述 Designate 服务器池设计的更大范围的文档的一部分。主要的蓝图位于 此处。
问题描述¶
服务器池需要创建、读取、更新和删除。为了执行这些操作,需要存在一个 API。
提议的变更¶
本文档详细定义了服务器池所需的 API 变更。
API 变更¶
API 细节:创建/列出/修补/删除池¶
提示
对于一般用途,这些都应限制为管理员使用。
动词 |
Resource |
描述 |
|---|---|---|
GET |
/pools |
返回所有池 |
GET |
/pools/{pool_id} |
返回具有更多详细信息的特定池 |
POST |
/pools |
创建新的池 |
PATCH |
/pools/{pool_id} |
使用请求中的数据更新池 |
DELETE |
/pools/{pool_id} |
删除池 |
GET /v2/pools¶
当未指定 ID 时,将返回所有池。请求中不提供主体。
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Location: /v2/pools
{
"pools": [
{
"name": "US Pool 1",
"id": "cf1fafc0-f2f0-11e3-ac10-0800200c9a66",
"links": {
"self" : "/v2/pools/cf1fafc0-f2f0-11e3-ac10-0800200c9a66"
},
"created_at": "2014-09-09T19:34:21.819615",
"updated_at": null
},
{
"name": "US Pool 2",
"id": "cddda8f0-f558-11e3-a3ac-0800200c9a66",
"links": {
"self" : "/v2/pools/cddda8f0-f558-11e3-a3ac-0800200c9a66"
},
"created_at": "2014-09-09T19:34:21.819615",
"updated_at": null
}
],
"links": {
"self": "/v2/pools"
}
}
GET /v2/pools/{pool_id}¶
当 URL 中提供 ID 时,将返回具有更多详细信息的特定池。请求中不提供主体。
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Location: /v2/pools/cf1fafc0-f2f0-11e3-ac10-0800200c9a66
{
"pool": {
"name": "US Pool 1",
"id": "cf1fafc0-f2f0-11e3-ac10-0800200c9a66",
"attributes": {
"geo-ip": true,
"anycast": false,
"scope": public,
},
"pool_servers": [
"1.2.3.4:53",
"5.4.3.2:53"
],
"nameservers": [
{"priority": 1, "hostname": "ns1.example.com."},
{"priority": 2, "hostname": "ns2.example.com."}
],
"project_id": "<uuid>",
"provisioner": "unmanaged",
"created_at": "2014-09-04T19:34:20.819723",
"updated_at": null
},
"links": {
"self": "/v2/pools/cf1fafc0-f2f0-11e3-ac10-0800200c9a66"
}
}
POST /v2/pools/¶
创建新的池时,用户必须提供名称和范围。最初,仅支持“public”范围。此处显示的其他值是可选的。如果名称与现有池相同,则返回码将为 409 Conflict(冲突)。
请求
HTTP/1.1
Content-Type: application/json; charset=UTF-8
Location: /v2/pools/
{
"pool": {
"name": "US Pool 3",
"attributes": {
"scope": public
},
"pool_servers": [
"10.11.12.13:53",
"13.12.11.10:53"
],
"nameservers": [
{"priority": 1, "hostname": "ns1.example.com."}
{"priority": 2, "hostname": "ns2.example.com."}
]
}
}
响应
HTTP/1.1 201 Created
Content-Type: application/json; charset=UTF-8
Location: /v2/pools/
{
"pool": {
"name": "US Pool 3",
"id": "cf1fafc0-f2f0-11e3-ac10-0800200c81a5",
"attributes": {
"scope": public,
}
"pool_servers": [
"10.11.12.13:53",
"13.12.11.10:53"
],
"nameservers": [
{"priority": 1, "hostname": "ns1.example.com."},
{"priority": 2, "hostname": "ns2.example.com."}
],
"created_at": "2014-09-04T19:34:20.819723",
"updated_at": null
},
"links": {
"self": "/v2/pools/cf1fafc0-f2f0-11e3-ac10-0800200c81a5"
}
}
PATCH /v2/pools/{pool_id}¶
要修改池,将提交 PATCH 请求。如果成功,将返回 200。
请求
HTTP/1.1
Content-Type: application/json; charset=UTF-8
Location: /v2/pools/cf1fafc0-f2f0-11e3-ac10-0800200c81a5
{
"pool": {
"pool_servers": [
"4.5.6.7:53"
]
}
}
响应
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Location: /v2/pools/cf1fafc0-f2f0-11e3-ac10-0800200c81a5
{
"pool": {
"name": "US Pool 3",
"id": "cf1fafc0-f2f0-11e3-ac10-0800200c81a5",
"attributes": {
"scope": public,
},
"pool_servers": [
"10.11.12.13:53",
"13.12.11.10:53",
"4.5.6.7:53"
],
"nameservers": [
{"priority": 1, "hostname": "ns1.example.com."},
{"priority": 2, "hostname": "ns2.example.com."}
],
"created_at": "2014-09-04T19:34:20.819723",
"updated_at": "2014-09-10T19:33:10.819555"
},
"links": {
"self": "/v2/pools/cf1fafc0-f2f0-11e3-ac10-0800200c81a5"
}
}
DELETE /v2/pools/{pool_id}¶
删除池时,用户必须在 URL 中提供 ID。请求主体和返回主体为空。返回 204
HTTP/1.1 204 No Content Content-Type: application/json; charset=UTF-8 Location: /v2/pools/cf1fafc0-f2f0-11e3-ac10-0800200c81a5
Central 变更¶
必须将池调用添加到 central,以允许服务器池的 CRUD 操作。
Storage 变更¶
必须将池调用添加到 storage。新表在不同的文档中描述。
实现¶
负责人¶
里程碑¶
- 完成目标里程碑
Kilo
工作项¶
创建池控制器和视图
将调用添加到 Central
将调用添加到 Storage
编写测试
依赖项¶
服务器池 MiniDNS 支持:https://review.openstack.org/#/c/112688/