如何使用 curl 查询 maas API

如何使用 curl 查询 maas API

我正在尝试弄清楚如何使用 curl 查询 MAAS 服务器。

我开始尝试使用 CLI 查询,以便我可以构建一个用于远程命令和查询的 python 脚本,而无需使用 MAAS CLI 应用程序。

最终目标是使用 ansible 控制/查询 MAAS。

我试过:

curl -u "username:password"  "http://machine/MAAS/api/1.0/nodes/?op=list" 

答复是:

Unrecognised signature: GET

答案1

您遇到的问题是 MAAS 需要身份验证才能返回节点列表。MAAS 通常通过 OAuth 验证 API 请求,而不是HTTP 基本身份验证这是curl -uWeb URL 的默认使用方式。

幸运的是,MAAS 还提供了一个名为的 Python 客户端库,apiclient它包含在python-maas-client软件包中。使用该库,您可以轻松使用 apikey 发出查询,您可以从 http://$MAAS_URL/MAAS/account/prefs/ 获取该 apikey。假设您有 APIKEY 和 MAAS_URL,以下代码片段演示了如何获取列表:

APIKEY = "foo:bar:baz"
MAAS_URL = "http://my.maas.host/MAAS/api/1.0"

from apiclient import maas_client
auth = maas_client.MAASOAuth(*APIKEY.split(":"))
client = maas_client.MAASClient(auth, maas_client.MAASDispatcher(), MAAS_URL)
print client.get(u"nodes/", "list").read()

顺便说一句,AIUI默认curl -X GET是查询类型问题。curl

[*] 我认为将路径标记为unicode是没有必要的,但代码中有一个断言可能是一个错误。已报告https://bugs.launchpad.net/maas/+bug/1418158

答案2

maas-api 中帖子的示例

desiredSettings = {
    "ip_range_high": "10.30.0.252",
    "ip_range_low": "10.30.0.152",
    "broadcast_ip": "10.30.0.255",
    "name": "eth3",
    "ip": "10.30.0.0",
    "subnet_mask": "255.255.255.0",
    "management": "2",
    "interface": "eth3"
}

#resp = client.post(u"nodegroups/%s/interfaces/" % (cluster_uuid), "new", **desiredSettings)

答案3

我在看http://marsweather.ingenology.com/并找到这个例子

curl -X GET http://marsweather.ingenology.com/v1/latest/

加上使用“curl”的其他 shell 代码。我认为这将帮助您入门。您仍然需要有工具来处理 JSON,但这似乎超出了这个问题的范围。

相关内容