如何通过DigitalOceanAPI使用Droplet标记

来自菜鸟教程
跳转至:导航、​搜索

介绍

DigitalOcean API 提供对 DigitalOcean 控制面板中的大多数功能的访问,并提供了一种从命令行或您自己的代码操作 Droplet 和其他资源的直接方法。

液滴标记是一项新功能。 该功能允许您通过应用标签对 Droplet 进行分组和定位,以及在具有特定标签的所有 Droplet 上启动操作。

先决条件

本指南对所有示例都使用 curl 实用程序和 Bash。 它假设您熟悉 DigitalOcean API 的使用,并且已经生成了 个人访问令牌 。 有关此过程的详细信息以及 API 使用的基础知识,请参阅 如何使用 DigitalOcean API v2

获得令牌后,首先在 shell 中设置 $TOKEN 变量。 export 命令确保子进程可以读取变量:

export TOKEN=your_personal_access_token

我们将在本文档的其余示例中使用 $TOKEN,始终在双引号字符串中,以便对其值而不是文字字符串 $TOKEN 进行插值。 如果您收到错误,请首先确保在您当前的 shell 中正确设置了此值。

创建、列出和查看标签

标签可以在应用于资源之前创建,也可以在资源创建期间创建和应用。

独立创建标签

使用 curl 将 POST 发送到 API 端点,包括 Content-Type 的标头、您的个人访问令牌和一些用于指定标签名称的 JSON 数据。 将您想要的标签名称替换为 tag_name

curl -X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d '{"name":"tag_name"}' \
"https://api.digitalocean.com/v2/tags"
Output{"tag":{"name":"tag_name","resources":{"droplets":{"count":0,"last_tagged":null}}}}

注意:此请求与任何其他更改您的帐户的请求一样,要求您的令牌具有分配给它的“写入”范围。


创建其他资源时创建和应用标签

资源还可以在创建时包含 tags 属性。 这是一组标签名称,将在创建时应用。 将创建尚不存在的标签以满足请求。 在撰写本文时,唯一受支持的资源是 Droplet,但最终其他资源将可用。

要创建 Droplet 并在创建时应用标签,您可以键入:

curl -X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d '{"name":"example.com","region":"nyc3","size":"512mb","image":"ubuntu-14-04-x64","tags":["tag_name","another_tag"]}' \
"https://api.digitalocean.com/v2/droplets"

这将创建一个应用了标签 tag_nameanother_tag 的新 Droplet。 如果执行了上一节中的示例,则此命令将应用现有的 tag_name 标签并创建 another_tag 标签并将其应用到 Droplet。

列出现有标签

您可以通过对 /v2/tags 的 GET 请求列出所有当前标签:

curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.digitalocean.com/v2/tags"
Output{"tags":[{"name":"tag_name","resources":{"droplets":{"count":0,"last_tagged":null}}}],"links":{},"meta":{"total":1}}

要查看单个标签,请使用对 /v2/tags/tag_name 的 GET 请求:

curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.digitalocean.com/v2/tags/tag_name"
Output{"tag":{"name":"tag_name","resources":{"droplets":{"count":0,"last_tagged":null}}}}

上面的示例输出很简短。 请注意,resources.droplets.last_tagged 属性是 null。 将标签与一个或多个 Droplet 关联后,此属性将包含有关最后标记的 Droplet 的详细信息。

标记和取消标记液滴

标签也可以应用于现有资源。 在撰写本文时,唯一受支持的资源是 Droplet,但最终其他资源将可用。

液滴使用它们的 id 属性与标签相关联。 您可以检索一个 JSON 对象,其中包含一个 droplets 数组,其中列出了对 /v2/droplets 的 GET 请求的所有液滴:

curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.digitalocean.com/v2/droplets"

一旦你知道了 Droplet 的 id,你可以通过 POST 到 /v2/tags/tag_name/resources 将其与标签相关联,包括将 resource_id 设置为 Droplet id 的 JSON 数据和resource_type 到字符串 droplet

curl -X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d '{"resources":[{"resource_id":"droplet_id","resource_type":"droplet"}]}' \
"https://api.digitalocean.com/v2/tags/tag_name/resources" 

再次尝试对标记的 GET 请求,resources.droplets.last_tagged 属性应该包含您刚刚标记的 Droplet 的详细信息:

curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.digitalocean.com/v2/tags/tag_name"

要从特定的 Droplet 中删除标签,您可以向 /v2/tags/tag_name/resources/ 发出 DELETE 请求,并使用与您最初用于标记 Droplet 的数据相同的数据:

curl -X DELETE \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d '{"resources":[{"resource_id":"droplet_id","resource_type":"droplet"}]}' \
"https://api.digitalocean.com/v2/tags/tag_name/resources" 

这将从资源中删除标签。

按标签查找液滴

要查找与特定标签关联的所有 Droplet,请向 /v2/droplets?tag_name=tag_name 发出 GET 请求:

curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.digitalocean.com/v2/droplets?tag_name=tag_name"

这将按请求的标签过滤您的液滴。

对标记的 Droplet 执行操作

您可以对与特定标签关联的所有 Droplet 执行许多操作:

数据 笔记
{"type":"power_cycle"} 关闭 Droplets 并重新打开。
{"type":"power_on"} 打开电源滴。 必须关了。
{"type":"power_off"} 电源滴关闭。 必须开启。
{"type":"shutdown"} 关闭 Droplets,类似于从命令行关闭电源。
{"type":"enable_private_networking"} 启用 私有网络
{"type":"enable_ipv6"} 为 Droplet 启用 IPv6 地址
{"type":"enable_backups"} 为 Droplet 启用备份。
{"type":"disable_backups"} 禁用备份。
{"type":"snapshot, "name": "snapshot_name"} 拍摄 Droplets 的快照。 必须先关闭 Droplets,并且必须使用 name

为了执行一个动作,向 /v2/droplets/actions?tag_name=tag_name 发送一个带有 JSON 数据的 POST,指定一个 type 和动作所需的任何附加值:

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"type":"action_type"}' \
"https://api.digitalocean.com/v2/droplets/actions?tag_name=tag_name"

您可以通过对 /v2/actions 的 GET 请求检索最近操作的历史记录,包括其完成状态:

curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.digitalocean.com/v2/actions"

这是确定操作是否已完成或仍在进行中的有用方法。

示例:对标记的 Droplet 进行快照

假设您有一个与名为 fileserver 的标签关联的 Droplet 集合,并且您想要对所有这些 Droplet 进行快照。

首先发出 shutdown 动作:

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"type":"shutdown"}' \
"https://api.digitalocean.com/v2/droplets/actions?tag_name=fileserver"

等待所有 Droplet 的关闭完成,然后发出 snapshot 操作,包括快照的 name 值:

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"type":"snapshot", "name":"snapshot_name"}' \
"https://api.digitalocean.com/v2/droplets/actions?tag_name=fileserver"

请记住,快照可能需要一个小时或更长时间才能完成,具体取决于 Droplet 的大小。 快照完成后,您可以使用 power_on 操作使 Droplets 重新联机:

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"type":"power_on"}' \
"https://api.digitalocean.com/v2/droplets/actions?tag_name=fileserver"

这将再次启动 Droplet。

删除标签

您可以删除标签本身,并删除它与所有资源的关联,向 /v2/tags/tag_name 发出 DELETE 请求:

curl -X DELETE \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
"https://api.digitalocean.com/v2/tags/tag_name"

标签将被完全删除。

结论

标记是一种简单的抽象,但结合基本的脚本工具,它可以提供一种强大的机制来清点和管理您的系统。

从这里,您可能希望深入挖掘 详细的 DigitalOcean API 文档 ,或研究 为流行编程语言包装 API 的库