我正在尝试弄清楚如何使用 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 -u
Web 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,但这似乎超出了这个问题的范围。