本作品采用知识共享署名 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。新表在不同的文档中描述。

实现

负责人

主要负责人

https://launchpad.net/~betsy-luzader

里程碑

完成目标里程碑

Kilo

工作项

  • 创建池控制器和视图

  • 将调用添加到 Central

  • 将调用添加到 Storage

  • 编写测试

依赖项