如何利用DigitalOcean API使用Droplet标签

介绍

DigitalOcean API 可访问 DigitalOcean 控制面板中的大多数功能,并提供从命令行或自己的代码中操作 Droplets 和其他资源的简单方法。

滴滴标记是一个新的功能,它允许您通过应用标签来组合和定位滴滴,以及通过特定标签在所有滴滴中启动操作。

前提条件

本指南使用curl工具和Bash为所有示例,假设您熟悉使用DigitalOcean API,并且已经生成了一个 个人访问代币

一旦你有一个代币,开始设置你的壳中的$TOKEN变量。

1export TOKEN=your_personal_access_token

对于本文中的其他示例,我们将使用$TOKEN,始终在一个双引用字符串中,以便其值,而不是字面字符串$TOKEN被插入。

创建、列出和查看标签

在应用到资源之前可以创建标签,也可以在创建资源时创建和应用标签。

独立创建标签

使用curl 将 POST 发送到 API 终端,包括Content-Type 的标题、您的个人访问代码和一些 JSON 数据来指定标签名称。

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

<$>[注] :此请求,就像任何其他请求对您的帐户进行更改一样,需要您的代币具有分配给它的范围。

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

资源也可以在创建时包含一个标签属性. 这是在创建时应用的一系列标签名称. 尚不存在的标签将被创建以满足请求。

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

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

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

现有日志列表

您可以列出您当前的所有标签,并通过 GET 请求将其列为 /v2/tags:

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

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

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

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

标签和解标滴滴

该标签也可以应用到现有资源. 在此写作时唯一受支持的资源是Droplet,但最终其他资源将可用。

滴滴与使用其id属性的标签相关联,您可以获取包含滴滴数列的JSON对象,其中列出您的所有滴滴与GET请求到/v2/droplets:

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

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

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

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

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

若要从特定 Droplet 中删除标签,您可以向 /v2/tags/tag_name/resources/ 发出 DELETE 请求,其中包含您在标签 Droplet 时使用的相同数据:

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

这将从资源中删除标签。

查找Dropplets by Tag

要找到与特定标签相关的所有 Droplets,请发出 GET 请求到 /v2/droplets?tag_name=tag_name:

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

这将通过请求的标签过滤您的Dropplets。

在标记 Droplets 上执行操作

您可以在与特定标签相关的所有 Droplets 上执行若干操作:

QQ 数据 QQ 注释 QQ QQ----------------------------------+------"类型":"功率_循环" QQ. QQ 关闭并重新打开 Droplets 。 QQ"类型":"power_on" QQ Power Droplets 打开. 一定关了。 电源滴出。 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}一定上线了 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}"shutdown" {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得怎么样? QQ 关闭 Dropplets, 类似于从命令行下放电. QQ QQ"类型":"enable_private_networking" QQ QQ 启用 [私有网络] (https://andsky.com/tech/tutorials/how-to-set-up-and-use-digitalocean-private-networking). QQ QQ"类型" :"enable_ipv6" QQ QQ 启用 Droplets 的 [IPv6 地址] (https://andsky.com/tech/tutorials/how-to-enable-ipv6-for-digitalocean-droplets ). QQ"类型" :"enable_backups" QQ QQ 启用 Droplets 的备份 。 QQ"类型" : 失效_ 备份 _% QQ 禁用备份. QQ QQ"类型" :"snapshot","name":"snapshot_name" QQ 取出 Droplets的快照. 首先必须切断电源,必须使用 " 姓名 " 。 |

若要执行一个操作,请将 POST 发送到 /v2/droplets/actions?tag_name=tag_name,并将 JSON 数据指定为 `type' 和任何其他需要的值:

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

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

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

这是确定行动是否已完成或仍在进行的一个有用的方法。

例子: Snapshotting 标签 滴滴

假设你有一组与名为fileserver的标签相关的Dropplets,你想拍摄它们。

第一個問題是「關閉」行動:

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

等待所有 Droplets 关闭完成,并发出快照操作,包括快照的名称值:

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

请记住,截图可能需要一个小时或更长的时间来完成,取决于Dropplet的大小。当截图完成后,您可以通过power_on操作将Dropplets带回网络:

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

这将再次开始滴滴。

删除日期

您可以删除标签本身,并删除其与所有资源的关联,通过删除请求到 /v2/tags/tag_name:

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

该标签将被完全删除。

结论

标签是一种简单的抽象,但与基本的脚本工具相结合,它可以提供一个强大的库存和管理系统的机制。

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

Published At
Categories with 技术
comments powered by Disqus