Seite 1 von 2

OPSI API

Verfasst: 27 Jun 2014, 15:29
von hawaii
Hallo @ll,

besitzt OPSI eine Web API über die ich von einem externen Skript Informationen vom System bekommen kann?
Zum Beispiel sowas wie "Gib mir die Mac Adresse zu folgendem Clientrechner"...

Irgendwie find ich da nichts dazu oder vielleicht stell ich mich an einem Freitag Nachmittag auch echt blöd an :shock:

Danke schon mal und Grüßle,
hawaii

Re: OPSI API

Verfasst: 27 Jun 2014, 16:38
von hawaii
Bin jetzt schon einen Schritt weiter und hab verstanden, dass das Ganze über json-rpc läuft, allerdings verstehe ich nicht ganz wie ich mich dem RPC Server gegenüber authentifizieren soll.
Gibt es dafür eine eigene Methode oder wie läuft das?
Hat hier schon jemand Erfahrung?

Grüßle,
Kai

Re: OPSI API

Verfasst: 27 Jun 2014, 19:16
von dkoch
Hier habe ich ein Beispiel in Ruby wiki/userspace:webservice_corner:ruby-rpc abgelegt.

Authentifiert wird über Basic-Auth

Re: OPSI API

Verfasst: 30 Jun 2014, 09:54
von n.wenselowski
Hallo,

es gibt eine API, die unter https://opsi.server.fqdn:4447/rpc angesprochen werden kann. Eine Übersicht über mögliche Methoden gibt es unter https://opsi.server.fqdn:4447/interface, das ist quasi der interaktive Modus ;)
Die API spricht JSON-RPC und man muss sich zur Kommunikation beim Server authentifizieren.


Gruß

Niko

Re: OPSI API

Verfasst: 30 Jun 2014, 14:10
von hawaii
Top, danke! Das sieht schon mal gut aus und sollte mir weiterhelfen :-)

Grüßle

Re: OPSI API

Verfasst: 01 Jul 2014, 16:01
von hawaii
Jetzt muss ich das Ganze doch noch mal aufmachen :D

Versuche nen json-rpc call gerade in python zu bauen und bekomme aber nur einen Fehler als Antwort zurück.
Irgendwie kann ich damit aber so gar nix anfangen....
Hat hier vielleicht jemand noch 'ne Idee wo das Problem hängen könnte?

Code: Alles auswählen

import requests
import json


def main():
    url = "https://user:password@opsi:4447/rpc"
    headers = {'content-type': 'application/json','Content-Encoding': 'gzip'}

    payload = {
        "method": "authenticated",
        "params": [""],
        "id": 1,
    }
    response = requests.post(
        url, data=json.dumps(payload), headers=headers, verify=False).json()

    print response


if __name__ == "__main__":
    main()
Leider ist das einzige was ich zurückbekomme:

Code: Alles auswählen

{u'error': {u'message': u'Error -3 while decompressing data: incorrect header check', u'class': u'error'}, u'result': None, u'id': None}

Re: OPSI API

Verfasst: 01 Jul 2014, 16:09
von dkoch
Schuss ins Blaue ohne es genau zu wissen:

Lass mal

Code: Alles auswählen

'Content-Encoding': 'gzip'
weg.

Sieht so aus als würde hier versucht werden etwas zu decomprimieren, was nicht comprimiert ist

Re: OPSI API

Verfasst: 01 Jul 2014, 16:11
von hawaii
Ne, das is es leider nicht, wenn ich das weg lasse, dann fällt er direkt auf die Fre....

Code: Alles auswählen

    raise ContentDecodingError(e)
requests.exceptions.ContentDecodingError: ('Received response with content-encoding: gzip, but failed to decode it.', error('Error -3 while decompressing: incorrect header check',))

Re: OPSI API

Verfasst: 01 Jul 2014, 16:27
von dkoch

Code: Alles auswählen

        "method": "authenticated",
        "params": [""],
        "id": 1,
Ist keine gültige methode.
http://download.uib.de/opsi4.0/doc/html ... cture-opsi

Code: Alles auswählen

        "method": "product_getHashes",
        "params": [""],
        "id": 1,
schon. Hat aber mit der Kompression leider nichts zu tun ;)

Re: OPSI API

Verfasst: 01 Jul 2014, 16:33
von hawaii
Unter https://opsi:4447/interface ist diese Methode aber gelistet und funktioniert auch, ich dachte diese Methoden sind alle verfügbar?
Leider bringt auch das nutzen der von dir angegebenen Methode keinen Erfolg.

Hm, ich steh echt irgendwie auf dem Schlauch gerade.....