como consultar a API do maas com curl

0

Estou tentando descobrir como consultar o servidor MAAS usando o curl.

Estou começando a experimentar a consulta da CLI para poder criar um script python para comando e consulta remotos sem precisar usar o aplicativo MAAS CLI.

O objetivo final é controlar / consultar o MAAS com ansible.

Eu tentei:

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

A resposta foi:

Unrecognised signature: GET
    
por Simply Seth 04.02.2015 / 02:21

3 respostas

1

O problema que você está enfrentando é que o MAAS requer autenticação antes de retornar a listagem de nós. O MAAS normalmente autentica solicitações da API por meio do OAuth, e não da Autenticação básica HTTP , que é o que o curl -u usa por padrão para URLs da Web.

Felizmente, o MAAS também fornece uma biblioteca cliente do Python chamada apiclient , que está incluída no pacote python-maas-client . Usar essa biblioteca permitiria que você publicasse a consulta trivialmente com um apikey, que você pode obter em http: // $ MAAS_URL / MAAS / account / prefs /. Supondo que você tenha APIKEY e MAAS_URL, o snippet abaixo demonstra como você buscaria a listagem:

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()

Aliás, AIUI curl -X GET é o tipo de consulta curl , por padrão.

[*] Acredito que marcar o caminho como unicode não seja necessário, mas há uma afirmação no código que pode ser um bug. Reportado link .

    
por kiko 04.02.2015 / 19:21
0

Eu olhei para link e encontrei este exemplo

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

mais outro código de shell usando "curl". Eu acho que você vai começar. Você ainda precisa ter ferramentas para lidar com o JSON, mas isso parece fora do escopo desta questão.

    
por vielmetti 04.02.2015 / 13:17
0

Exemplo de postagem no 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)
    
por binoy 20.10.2015 / 11:38