Как запросить API-интерфейс maas с помощью curl
Я пытаюсь выяснить, как запросить сервер MAAS с помощью curl.
Я начинаю экспериментировать с запросом CLI, чтобы создать сценарий Python для удаленных команд и запросов без использования приложения MAAS CLI.
Конечной целью является управление / запрос MAAS с помощью ansible.
Я старался:
curl -u "username:password" "http://machine/MAAS/api/1.0/nodes/?op=list"
Ответ был:
Unrecognised signature: GET
3 ответа
Проблема, с которой вы сталкиваетесь, заключается в том, что MAAS требует аутентификацию, прежде чем он вернет список узлов. MAAS обычно проверяет подлинность запросов API через OAuth, а не через HTTP Basic Authentication. curl -u
используется по умолчанию для веб-URL.
К счастью, MAAS также предоставляет клиентскую библиотеку Python под названием apiclient
который включен в python-maas-client
пакет. Использование этой библиотеки позволит вам легко выполнить запрос с помощью apikey, который вы можете получить по адресу http://$MAAS_URL/MAAS/account/prefs/. Предполагая, что у вас есть 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.
Пример поста в маас-апи
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)
Я посмотрел на http://marsweather.ingenology.com/ и нашел этот пример
curl -X GET http://marsweather.ingenology.com/v1/latest/
плюс другой шелл-код, использующий curl. Я думаю, это поможет вам начать. Вам все еще нужно иметь инструменты для работы с JSON, но это выходит за рамки этого вопроса.