Admin Logic Version 1 API 参考¶
这是 Adjutant 在使用默认配置时的参考文档。不同的部署可能排除某些 DelegateAPI 或包含他们自己的额外 API。
Adjutant 的核心功能围绕任务和动作的概念构建。
动作既是数据库中的概念,也是可以在每个阶段执行所需逻辑的代码。
任务可以捆绑多个动作,并具有 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 身份验证服务器。 |
服务发现¶
未经验证。
JSON 包含当前可用版本的详细信息(目前仅 v1)。
正常响应代码:200
未经验证。
详细 V1 版本信息。
正常响应代码:200
管理端点¶
用于管理任务、令牌和通知的端点。其中大多数都受到角色限制,或仅供管理员使用。
身份验证:管理员
正常响应代码:200
简单的状态端点。
返回未确认的错误通知列表,以及最后创建和最后完成的任务。
身份验证:管理员
正常响应代码: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"
}
}
身份验证:管理员
正常响应代码: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"
}
身份验证:项目管理员或项目审核员
正常响应代码: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."]
}
身份验证:管理员
正常响应代码: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."]
}
在大多数情况下,批准后会向请求任务的用户发送电子邮件。
身份验证:管理员、项目管理员或项目审核员
正常响应代码:200
错误响应代码:400、401、403、404
取消任务。任务可以在完成之前的任何阶段取消,取消的任务颁发的令牌将被使无效。
项目管理员和项目审核员只能取消与其项目关联的任务。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
task_id |
路径 |
字符串 |
任务 UUID,如任务列表和电子邮件通信中所示。 |
身份验证:管理员
正常响应代码:200
错误响应代码:401、403
列出所有活动令牌。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
filters (可选) |
查询 |
字典 |
Django 样式的任务、令牌和通知端点过滤器。有关详细信息,请参阅 Filters 部分。 |
身份验证:管理员、项目管理员或项目审核员
正常响应代码:200
错误响应代码:400、401、403、404
为指定的任务重新颁发令牌。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
task_id |
body |
int |
任务 UUID,如任务列表和电子邮件通信中所示。 |
身份验证:管理员
正常响应代码:200
错误响应代码:401、403
删除所有过期的令牌。
请注意,如果令牌已过期,则当有人尝试访问它时,它将被删除,这将防止数据库变得拥堵,但不会影响功能。
身份验证:未经验证
正常响应代码: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"
}
身份验证:未经验证
正常响应代码: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."]}
在大多数情况下,令牌提交后会发送电子邮件,详细说明已更改的内容。
身份验证:管理员
正常响应代码:200
错误响应代码:401、403
列出所有未确认的通知
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
filters (可选) |
查询 |
字典 |
Django 样式的任务、令牌和通知端点过滤器。有关详细信息,请参阅 Filters 部分。 |
身份验证:管理员
将给定的通知列表标记为已确认
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
notifications |
body |
数组 |
要确认的通知 UUID 列表 |
获取特定通知的详细信息
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
notification_id |
路径 |
字符串 |
通知 UUID,如列表端点和电子邮件通信中所示。 |
确认特定通知。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
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 端点¶
“任务已创建”的响应表示任务需要管理员批准,“创建令牌”的响应表示任务已自动批准,并等待通过电子邮件发送的令牌提交。
身份验证:项目审核员或管理员
列出当前项目中的当前和待定用户。
请求示例¶
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"
}
]
}
身份验证:项目审核员或管理员
一个自动批准的任务,它会将用户添加到项目中。如果用户已存在,它将直接添加他们,否则,当被邀请者提交通过电子邮件发送的令牌时,它将创建一个用户
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
roles |
body |
数组 |
用户的角色列表。 |
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"]
}
身份验证:项目审核员或管理员
获取有关给定用户的详细信息,包括他们在您项目中的角色
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
user_id |
路径 |
字符串 |
用户 ID,如 ../v1/openstack/users 页面上所示。请注意,对于已确认的用户,这是 openstack 用户 ID,对于受邀用户,这是任务 ID。 |
身份验证:项目审核员或管理员
取消待定用户邀请。可以通过删除所有角色从您的项目中删除当前用户。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
user_id |
路径 |
字符串 |
用户 ID,如 ../v1/openstack/users 页面上所示。请注意,对于已确认的用户,这是 openstack 用户 ID,对于受邀用户,这是任务 ID。 |
身份验证:项目审核员或管理员
列出用户在当前项目中的所有角色
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
user_id |
路径 |
字符串 |
用户 ID,如 ../v1/openstack/users 页面上所示。请注意,对于已确认的用户,这是 openstack 用户 ID,对于受邀用户,这是任务 ID。 |
身份验证:项目审核员或管理员
将指定的角色添加到当前项目中的用户。
存在额外的身份验证,即当前用户可以编辑哪些角色。如果目标用户具有当前用户无法编辑的任何角色,则用户将无法编辑他们的任何角色。可编辑的角色可以在 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."
]
}
身份验证:项目审核员或管理员
从当前项目中的用户删除指定的角色。
项目审核员将无法更改项目管理员的角色。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
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."
]
}
身份验证:项目审核员或管理员
列出当前用户可以修改的角色。
请求示例¶
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"
},
]
}
身份验证:未经验证
用于忘记密码请求的未经验证。如果电子邮件与关联用户相关联,则会向他们发送令牌以重置密码。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
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."]
}
身份验证:已验证
提交当前用户的新的电子邮件地址。将向新地址发送提交令牌,并向旧电子邮件地址发送通知。在令牌提交之前,帐户地址不会更改。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
body |
字符串 |
新用户的电子邮件地址。 |
身份验证:未经验证
帐户创建端点。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
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"]
}
身份验证:项目审核员或管理员
列出当前项目的配额详细信息。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
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"
}
]
}
身份验证:项目审核员或管理员
启动配额更新任务。如果未指定区域,它将在所有区域更新配额。
名称 |
入参 |
类型 |
描述 |
|---|---|---|---|
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."]
}