Я пытаюсь выяснить, как запросить сервер МААСА с помощью завихрения.
Я начинаю экспериментировать с запросом CLI так, чтобы я мог создать сценарий Python для удаленной команды и запросить, не имея необходимость использовать приложение CLI МААСА.
Конечная цель должна управлять/запрашивать МААСОМ с ansible.
Я попробовал:
curl -u "username:password" "http://machine/MAAS/api/1.0/nodes/?op=list"
Ответ был:
Unrecognised signature: GET
Проблема, с которой Вы сталкиваетесь, - то, что МААС требует аутентификации, прежде чем это возвратит список узлов. МААС обычно аутентифицирует запросы API через OAuth, не Базовая аутентификация HTTP , который является что curl -u
использование по умолчанию для веб-URL.
К счастью, МААС также обеспечивает клиентскую библиотеку 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 / + ошибка/1418158 .
Я посмотрел http://marsweather.ingenology.com/ и нашел этот пример
curl -X GET http://marsweather.ingenology.com/v1/latest/
плюс другой код оболочки с помощью "завихрения". Я думаю, что это запустит Вас. У Вас все еще должны быть инструменты для контакта с JSON, но это кажется из объема для этого вопроса.
Пример почты в 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)