Как запросить 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, но это выходит за рамки этого вопроса.

Другие вопросы по тегам