如何通过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_name
和 another_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 的库 。