Admin Logic Version 1 API 参考

这是 Adjutant 在使用默认配置时的参考文档。不同的部署可能排除某些 DelegateAPI 或包含他们自己的额外 API。

Adjutant 的核心功能围绕任务和动作的概念构建。

动作既是数据库中的概念,也是可以在每个阶段执行所需逻辑的代码。

任务可以捆绑多个动作,并具有 3 个主要步骤。

  1. 用户提交请求到指定的端点。

  2. 管理员批准请求,或自动批准。 此时,管理员还可以更新任务内部无效的数据。

  3. 如果需要,系统会通过电子邮件向用户发送令牌,用户将提交其他数据(例如密码或确认信息)以完成任务。

根据任务和提供的数据,某些步骤可能会被跳过。

身份验证

应在 ‘X-Auth-Token’ 标头中提供有效的 Keystone 令牌进行身份验证。

HTTP 状态码

成功

代码

原因

200 - 正常

请求成功。

200 - 正常

请求成功,任务已提交。

202 - Accepted

请求已接受,但处理可能需要一些时间。

错误

代码

原因

400 - 请求错误

请求错误

401 - 未授权

用户未经过身份验证,或 X-Auth-Token 已过期。

403 - 禁止

用户没有执行此操作的正确角色。

404 - Not Found

找不到请求的资源。

405 - 方法不允许

该方法对于此端点和资源无效。

409 - Conflict

冲突

500 - 内部服务器错误

服务出现问题,导致无法满足请求。

503 - 服务不可用

Adjutant 无法连接到 Keystone 身份验证服务器。

服务发现

GET
/

版本发现端点

未经验证。

JSON 包含当前可用版本的详细信息(目前仅 v1)。

正常响应代码:200

GET
/v1

版本一详细信息端点

未经验证。

详细 V1 版本信息。

正常响应代码:200

管理端点

用于管理任务、令牌和通知的端点。其中大多数都受到角色限制,或仅供管理员使用。

GET
/v1/status

状态

身份验证:管理员

正常响应代码:200

简单的状态端点。

返回未确认的错误通知列表,以及最后创建和最后完成的任务。

GET
/v1/tasks

列出任务

身份验证:管理员

正常响应代码:200

错误响应代码:401、403

列出所有任务。

名称

入参

类型

描述

filters (可选)

查询

字典

Django 样式的任务、令牌和通知端点过滤器。有关详细信息,请参阅 Filters 部分。

page (可选)

查询

int

要访问的页码,从 1 开始,默认为 1。

tasks_per_page (可选)

查询

int

每页查看的任务数量限制。

请求示例

curl -H "X-Auth-Token: $OS_TOKEN" http://adjutant/v1/tasks

响应示例

{
    "tasks": [
        {
            "action_notes": {
                "ResetUserPasswordAction": [
                    "Existing user with matching email.",
                ]
            },
            "actions": [
                {
                    "action_name": "ResetUserPasswordAction",
                    "data": {
                        "domain_name": "Default",
                        "email": "demo@example.com"
                    },
                    "valid": true
                }
            ],
            "approved": true,
            "approved_by": {},
            "approved_on": "2017-08-30T21:29:48.484441Z",
            "cancelled": false,
            "completed": true,
            "completed_on": "2017-08-30T21:30:13.269498Z",
            "created_on": "2017-08-30T21:29:47.989851Z",
            "ip_address": "127.0.0.1",
            "keystone_user": {},
            "project_id": null,
            "task_type": "reset_user_password",
            "uuid": "d5c7901cfecd45ec9a87871035c9f662"
        },
        {
        "action_notes": {
            "NewProjectDefaultNetworkAction": [],
            "NewProjectWithUserAction": [],
            "SetProjectQuotaAction": []
        },
        "actions": [
            {
                "action_name": "NewProjectWithUserAction",
                "data": {
                    "domain_id": "default",
                    "email": "test@example.com",
                    "parent_id": null,
                    "project_name": "test_project"
                },
                "valid": true
            },
            {
                "action_name": "NewProjectDefaultNetworkAction",
                "data": {
                    "region": "RegionOne",
                    "setup_network": false
                },
                "valid": true
            },
            {
                "action_name": "SetProjectQuotaAction",
                "data": {},
                "valid": true
            }
        ],
        "approved": false,
        "approved_by": {},
        "approved_on": None,
        "cancelled": false,
        "completed": false,
        "completed_on": null,
        "created_on": "2017-07-26T21:44:21.082248Z",
        "ip_address": "127.0.0.1",
        "keystone_user": {},
        "project_id": null,
        "task_type": "create_project_and_user",
        "uuid": "370d952c63ba410c8704abc12cfd97b7"
    }
}
GET
/v1/tasks/

任务详细信息

身份验证:管理员

正常响应代码:200

错误响应代码:401、403、404

提供特定任务的详细信息。

名称

入参

类型

描述

task_id

路径

字符串

任务 UUID,如任务列表和电子邮件通信中所示。

请求示例

curl -H "X-Auth-Token: $OS_TOKEN" http://adjutant/v1/tasks/d5c7901cfecd45ec9a87871035c9f662

响应示例

{
    "action_notes": {
        "ResetUserPasswordAction": [
            "Existing user with matching email.",
        ]
    },
    "actions": [
        {
            "action_name": "ResetUserPasswordAction",
            "data": {
                "domain_name": "Default",
                "email": "demo@example.com"
            },
            "valid": true
        }
    ],
    "approved": true,
    "approved_by": {},
    "approved_on": "2017-08-30T21:29:48.484441Z",
    "cancelled": false,
    "completed": true,
    "completed_on": null,
    "created_on": "2017-08-30T21:29:47.989851Z",
    "ip_address": "127.0.0.1",
    "keystone_user": {},
    "project_id": null,
    "task_type": "reset_user_password",
    "uuid": "d5c7901cfecd45ec9a87871035c9f662"
}
PUT
/v1/tasks/

更新任务

身份验证:项目管理员或项目审核员

正常响应代码:200

错误响应代码:400、401、403、404

替换未批准的动作中的数据并重新运行预审批步骤

名称

入参

类型

描述

task_data

body

字典

替换任务所有数据的字典。有关应包含的值,请参阅任务详细信息。

请求示例

curl -H "X-Auth-Token: $OS_TOKEN" \
    -H 'Content-Type: application/json' \
    -X PUT --data '{
        "project_name": "a_project",
        "email": "example.a@t.com",
        "region": "RegionOne",
        "setup_network": false
      }' http://0.0.0.0:5050/v1/tasks/19dbe418ecc14aeb94053f23eda01c78

响应示例

{
  "notes": ["Task successfully updated."]
}
POST
/v1/tasks/

批准任务

身份验证:管理员

正常响应代码:200

错误响应代码:400、401、403、404

批准任务并运行动作审批步骤。

名称

入参

类型

描述

task_id

路径

字符串

任务 UUID,如任务列表和电子邮件通信中所示。

approved

body

布尔值

批准任务的确认信息。

请求示例

curl -H "X-Auth-Token: $OS_TOKEN" -H 'Content-Type: application/json' \
      -d '{"approved": true}' http://0.0.0.0:5050/v1/tasks/19dbe418ecc14aeb94053f23eda01c78

响应示例

{
  "notes": ["Created Token."]
}

在大多数情况下,批准后会向请求任务的用户发送电子邮件。

DELETE
/v1/tasks/

取消任务

身份验证:管理员、项目管理员或项目审核员

正常响应代码:200

错误响应代码:400、401、403、404

取消任务。任务可以在完成之前的任何阶段取消,取消的任务颁发的令牌将被使无效。

项目管理员和项目审核员只能取消与其项目关联的任务。

名称

入参

类型

描述

task_id

路径

字符串

任务 UUID,如任务列表和电子邮件通信中所示。

GET
/v1/tokens

列出令牌

身份验证:管理员

正常响应代码:200

错误响应代码:401、403

列出所有活动令牌。

名称

入参

类型

描述

filters (可选)

查询

字典

Django 样式的任务、令牌和通知端点过滤器。有关详细信息,请参阅 Filters 部分。

POST
/v1/tokens

重新颁发令牌

身份验证:管理员、项目管理员或项目审核员

正常响应代码:200

错误响应代码:400、401、403、404

为指定的任务重新颁发令牌。

名称

入参

类型

描述

task_id

body

int

任务 UUID,如任务列表和电子邮件通信中所示。

DELETE
/v1/token

删除过期令牌

身份验证:管理员

正常响应代码:200

错误响应代码:401、403

删除所有过期的令牌。

请注意,如果令牌已过期,则当有人尝试访问它时,它将被删除,这将防止数据库变得拥堵,但不会影响功能。

GET
/v1/token/

获取令牌详细信息

身份验证:未经验证

正常响应代码:200

错误响应代码:401、403、404

详细说明令牌的动作、任务类型和所需字段

名称

入参

类型

描述

token_id

路径

字符串

令牌 UUID,如列表和电子邮件通信中所示。

请求示例

curl http://0.0.0.0:5050/v1/tokens/771af33fb28e46aab45e265bd6a6d469

响应示例

{
  "actions": [
      "NewProjectWithUserAction",
      "NewProjectDefaultNetworkAction",
      "SetProjectQuotaAction"
  ],
  "required_fields": [
      "password"
  ],
  "task_type": "create_project_and_user"
}
POST
/v1/token/

提交令牌

身份验证:未经验证

正常响应代码:200

错误响应代码:400、404

提交令牌及其数据到动作执行的最后阶段。如果它不包含所有必要的字段,将返回 400。

名称

入参

类型

描述

token_id

路径

字符串

令牌 UUID,如列表和电子邮件通信中所示。

token_data

body

字典

替换任务所有数据的字典。使用令牌获取请求查看应包含的内容。

请求示例

curl -H 'Content-Type: application/json' \
     -d '{"password": "12345"}' http://0.0.0.0:5050/v1/tokens/771af33fb28e46aab45e265bd6a6d469

响应示例

{"notes":["Token submitted successfully."]}

在大多数情况下,令牌提交后会发送电子邮件,详细说明已更改的内容。

GET
/v1/notification

列出通知

身份验证:管理员

正常响应代码:200

错误响应代码:401、403

列出所有未确认的通知

名称

入参

类型

描述

filters (可选)

查询

字典

Django 样式的任务、令牌和通知端点过滤器。有关详细信息,请参阅 Filters 部分。

POST
/v1/notification

确认通知列表

身份验证:管理员

将给定的通知列表标记为已确认

名称

入参

类型

描述

notifications

body

数组

要确认的通知 UUID 列表

GET
/v1/notification/

通知详细信息

获取特定通知的详细信息

名称

入参

类型

描述

notification_id

路径

字符串

通知 UUID,如列表端点和电子邮件通信中所示。

GET
/v1/notification/

确认通知

确认特定通知。

名称

入参

类型

描述

notification_id

路径

字符串

通知 UUID,如列表端点和电子邮件通信中所示。

acknowledged

body

布尔值

确认通知的确认信息。

过滤任务、令牌和通知

可以使用 Django ORM 过滤器的变体来过滤任务、令牌和通知列表端点。

这是通过 HTTP 参数通过 json 发送过滤器来实现的

{'filters': {'fieldname': { 'operation': 'value'}}

示例

{'filters': {'task_id': { 'exact': '842433bb-fa08-4fc1-8c3b-aa9904ceb370'}}

这在 url 中看起来有点混乱,因为该 json 最终会变成 url 安全编码,但是以这种方式进行过滤可以为我们提供相当大的灵活性。

可能的字段查找操作:https://docs.django.ac.cn/en/1.11/ref/models/querysets/#id4

OpenStack 样式的 DelegateAPI 端点

“任务已创建”的响应表示任务需要管理员批准,“创建令牌”的响应表示任务已自动批准,并等待通过电子邮件发送的令牌提交。

GET
/v1/openstack/users

列出用户

身份验证:项目审核员或管理员

列出当前项目中的当前和待定用户。

请求示例

curl -H "X-Auth-Token: $NOS_TOKEN" http://0.0.0.0:5050/v1/openstack/users

响应示例

{
    "users": [
        {
            "cohort": "Member",
            "email": "demo@example.com",
            "id": "",
            "manageable": false,
            "name": "demo",
            "roles": [
                "project_admin",
                "_member_"
            ],
            "status": "Active"
        }
    ]
}
POST
/v1/openstack/users

邀请用户

身份验证:项目审核员或管理员

一个自动批准的任务,它会将用户添加到项目中。如果用户已存在,它将直接添加他们,否则,当被邀请者提交通过电子邮件发送的令牌时,它将创建一个用户

名称

入参

类型

描述

roles

body

数组

用户的角色列表。

email

body

字符串

新用户的电子邮件地址。

username (可选)

body

字符串

新用户的用户名,仅当 USERNAME_IS_EMAIL 为 false 时才需要。

请求示例

curl -H "X-Auth-Token: $NOS_TOKEN" http://0.0.0.0:5050/v1/openstack/users \
 -H 'Content-Type: application/json' \
-d '{"roles": ["member"], "email": "new@example.com"}'

响应示例

{
  "notes": ["created token"]
}
GET
/v1/openstack/users/

用户详细信息

身份验证:项目审核员或管理员

获取有关给定用户的详细信息,包括他们在您项目中的角色

名称

入参

类型

描述

user_id

路径

字符串

用户 ID,如 ../v1/openstack/users 页面上所示。请注意,对于已确认的用户,这是 openstack 用户 ID,对于受邀用户,这是任务 ID。

DELETE
/v1/openstack/users/

取消用户邀请

身份验证:项目审核员或管理员

取消待定用户邀请。可以通过删除所有角色从您的项目中删除当前用户。

名称

入参

类型

描述

user_id

路径

字符串

用户 ID,如 ../v1/openstack/users 页面上所示。请注意,对于已确认的用户,这是 openstack 用户 ID,对于受邀用户,这是任务 ID。

GET
/v1/openstack/users//roles

列出用户角色

身份验证:项目审核员或管理员

列出用户在当前项目中的所有角色

名称

入参

类型

描述

user_id

路径

字符串

用户 ID,如 ../v1/openstack/users 页面上所示。请注意,对于已确认的用户,这是 openstack 用户 ID,对于受邀用户,这是任务 ID。

PUT
/v1/openstack/users//roles

添加用户角色

身份验证:项目审核员或管理员

将指定的角色添加到当前项目中的用户。

存在额外的身份验证,即当前用户可以编辑哪些角色。如果目标用户具有当前用户无法编辑的任何角色,则用户将无法编辑他们的任何角色。可编辑的角色可以在 List available roles 端点找到。

名称

入参

类型

描述

user_id

路径

字符串

用户 ID,如 ../v1/openstack/users 页面上所示。请注意,对于已确认的用户,这是 openstack 用户 ID,对于受邀用户,这是任务 ID。

roles

body

数组

用户的角色列表。

请求示例

curl -H "X-Auth-Token: $NOS_TOKEN" -H 'Content-Type: application/json' \
-d '{"roles": ["project_mod"]}' -X PUT \
http://0.0.0.0:5050/v1/openstack/users/5123ca764f3d40d79e3589e91f1ccb8f/roles

响应示例

{
    "notes": [
        "Task completed successfully."
    ]
}
DELETE
/v1/openstack/users//roles

删除用户角色

身份验证:项目审核员或管理员

从当前项目中的用户删除指定的角色。

项目审核员将无法更改项目管理员的角色。

名称

入参

类型

描述

user_id

路径

字符串

用户 ID,如 ../v1/openstack/users 页面上所示。请注意,对于已确认的用户,这是 openstack 用户 ID,对于受邀用户,这是任务 ID。

roles

body

数组

用户的角色列表。

请求示例

curl -H "X-Auth-Token: $NOS_TOKEN" -H 'Content-Type: application/json' \
-d '{"roles": ["project_mod"]}' -X DELETE \
http://0.0.0.0:5050/v1/openstack/users/5123ca764f3d40d79e3589e91f1ccb8f/roles

响应示例

{
    "notes": [
        "Task completed successfully."
    ]
}
GET
/v1/openstack/roles

列出可用角色

身份验证:项目审核员或管理员

列出当前用户可以修改的角色。

请求示例

curl -H "X-Auth-Token: $NOS_TOKEN" http://0.0.0.0:5050/v1/openstack/roles/

响应示例

{
    "roles": [
        {
            "domain_id": null,
            "id": "b81efc1e23a043d0976dc39b3e2727c3",
            "links": {
                "self": "http://identity/v3/roles/b81efc1e23a043d0976dc39b3e2727c3"
            },
            "name": "project_mod"
        },
        {
            "domain_id": null,
            "id": "9fe2ff9ee4384b1894a90878d3e92bab",
            "links": {
                "self": "http://identity/v3/roles/9fe2ff9ee4384b1894a90878d3e92bab"
            },
            "name": "member"
        },
    ]
}
POST
/v1/openstack/users/password-reset

密码重置

身份验证:未经验证

用于忘记密码请求的未经验证。如果电子邮件与关联用户相关联,则会向他们发送令牌以重置密码。

名称

入参

类型

描述

email

body

字符串

需要重置密码的用户电子邮件地址

username (可选)

body

字符串

用户名,仅当 USERNAME_IS_EMAIL 为 false 时才需要。

请求示例

curl -d '{"email": "demo@example.org"}' http://0.0.0.0:5050/v1/openstack/users/password-reset

响应示例

{
  "notes": ["If user with email exists, reset token will be issued."]
}
POST
/v1/openstack/email-update

更新电子邮件地址

身份验证:已验证

提交当前用户的新的电子邮件地址。将向新地址发送提交令牌,并向旧电子邮件地址发送通知。在令牌提交之前,帐户地址不会更改。

名称

入参

类型

描述

email

body

字符串

新用户的电子邮件地址。

POST
/v1/openstack/sign-up

注册

身份验证:未经验证

帐户创建端点。

名称

入参

类型

描述

email

body

字符串

新用户的电子邮件地址。

username (可选)

body

字符串

新用户的用户名,仅当 USERNAME_IS_EMAIL 为 false 时才需要。

project_name

查询

字符串

新项目的名称。

setup_network

查询

布尔值

是否为新项目设置默认网络

region

查询

字符串

要在其中执行操作的区域。

请求示例

curl -H 'X-Auth-Token: $OS_TOKEN' -H 'Content-Type: application/json' -d '{
    "email": "example@example.com", "project_name": "example_project"}'
    -X POST  http://0.0.0.0:5050/v1/openstack/sign-up

响应示例

{
  "notes": ["task created"]
}
GET
/v1/openstack/quotas

显示配额详细信息

身份验证:项目审核员或管理员

列出当前项目的配额详细信息。

名称

入参

类型

描述

region

查询

字符串

要在其中执行操作的区域。

请求示例

curl -H "X-Auth-Token: $NOS_TOKEN" http://0.0.0.0:5050/v1/openstack/quotas

响应示例

{
    "active_quota_tasks": [],
    "quota_size_order": [
        "small",
        "medium",
        "large"
    ],
    "quota_sizes": {
        "large": {
            "cinder": {
                "gigabytes": 50000,
                "snapshots": 600,
                "volumes": 200
            },
            "neutron": {
                "floatingip": 50,
                "network": 10,
                "port": 500,
                ...
            },
            "nova": {
                "cores": 200,
                "fixed_ips": 0,
                "floating_ips": 50,
                "injected_file_content_bytes": 10240,
                ...
            }
        },
        'small': { ... },
        'medium': { ... }
    },
    "regions": [
        {
            "current_quota": {
                "cinder": {
                    "backup_gigabytes": 1000,
                    "backups": 10,
                    "gigabytes": 1000,
                    ...
                },
                "neutron": {
                    "floatingip": 50,
                    "network": 10,
                    "port": 50,
                    ...
                },
                "nova": {
                    "cores": 20,
                    "fixed_ips": -1,
                    "floating_ips": 10,
                    "injected_file_content_bytes": 10240,
                    ...
                }
            },
            "current_quota_size": "custom",
            "current_usage": {
                "cinder": {
                    "gigabytes": 1,
                    "snapshots": 0,
                    "volumes": 1
                },
                "neutron": {
                    "floatingip": 0,
                    "network": 1,
                    "port": 2,
                    "router": 1
                    ...
                },
                "nova": {
                    "cores": 0,
                    "floating_ips": 0,
                    ...
                }
            },
            "quota_change_options": [],
            "region": "RegionOne"
        }
    ]
}
POST
/v1/openstack/quotas

更新配额

身份验证:项目审核员或管理员

启动配额更新任务。如果未指定区域,它将在所有区域更新配额。

名称

入参

类型

描述

regions (可选)

body

数组

要在其中执行操作的区域。

size

body

字符串

配额请求中显示的选项中,应将区域更新为哪个大小。

请求示例

curl -H "X-Auth-Token: $NOS_TOKEN" http://0.0.0.0:5050/v1/openstack/quotas
  -d '{"region": "RegionOne", "size": "small"}' -H "Content-Type: application/json"

响应示例

{
  "notes": ["Task processed. Awaiting Aprroval."]
}