Récupération d'information ordinateur via l'API RPC

Ce forum est destiné au support entre utilisateurs de logiciel OPSI
jroch
Beiträge: 10
Registriert: 21 Okt 2014, 18:06

Récupération d'information ordinateur via l'API RPC

Beitragvon jroch » 21 Okt 2014, 18:28

Bonjour à tous, c'est mon premier topic sur ce forum alors soyez indulgent :D .

L'objectif de mon topic est le suivant : Pouvoir récupérer le nom des machines ayant l'attribut "actionRequest" sur Setup.

Via l'interface web d'opsi : https://XXX.votredomain.fr/interface/extend/configed (opsiconfd interface page)
Le Path sur : interface/extend/configed
La Methode sur : productOnClient_getHashes

j'obtient une liste d'ordinateur de mon parc de ce type :

...

Code: Alles auswählen

{
        "id": 1,
        "result": [
               {
                      "actionProgress": "",
                      "actionResult": "successful",
                      "clientId": "ORDINATEUR1",
                      "modificationTime": "2014-02-10 15:01:35",
                      "actionRequest": "none",
                      "targetConfiguration": "installed",
                      "productVersion": "9.20",
                      "productType": "LocalbootProduct",
                      "type": "ProductOnClient",
                      "lastAction": "setup",
                      "packageVersion": "3",
                      "actionSequence": -1,
                      "installationStatus": "installed",
                      "productId": "7-zip"
               },
               {
                      "actionProgress": "",
                      "actionResult": "successful",
                      "clientId": "ORDINATEUR2",
                      "modificationTime": "2014-02-12 12:43:20",
                      "actionRequest": "setup",
                      "targetConfiguration": "installed",
                      "productVersion": "9.20",
                      "productType": "LocalbootProduct",
                      "type": "ProductOnClient",
                      "lastAction": "setup",
                      "packageVersion": "3",
                      "actionSequence": -1,
                      "installationStatus": "installed",
                      "productId": "7-zip"
               },

Etc..

Et donc je souhaite trouver le moyen de récupérer uniquement le nom et le productId des ordinateurs ayant l'attribut : "actionRequest" sur "setup".

J'ai lu quelque topic sur l'utilisation des SOAP's, je me suis aussi lancer dans le parsing d'une page html pour trier les ordinateurs via le code source de la page web en python mais je trouve sa pas propre.

Auriez-vous des conseils a m'apporter sur l'objectif voulus ??
Mercii beaucoup d'avance ;)

r.roeder
Beiträge: 420
Registriert: 02 Jul 2008, 10:08

Re: Récupération d'information ordinateur via l'API RPC

Beitragvon r.roeder » 21 Okt 2014, 22:50

Bon soir,

une solution "simple" est la ligne de commande:

Code: Alles auswählen

opsi-admin -dS method productOnClient_getObjects '[]' '{"actionRequest":"setup"}' | egrep "productId|clientId" | sed  's/productId=/:/' |sed 's/clientId=//' | sed 'N; s/\n//'


Est-ce que ça que vous voulez?

La clé est la interface json de opsi qui a une propre syntaxe de recherches. Elle n*est pas difficile mais il n'y a malheureusement pas beaucoup de documentation.

Bien à vous

Rupert Röder
opsi support - uib gmbh
For productive opsi installations we recommend maintainance + support contracts which are the base of opsi development.


Wondering who's using opsi? Have a look at the opsi map: http://opsi.org/opsi-map/.

jroch
Beiträge: 10
Registriert: 21 Okt 2014, 18:06

Re: Récupération d'information ordinateur via l'API RPC

Beitragvon jroch » 22 Okt 2014, 11:43

Merci beaucoup pour votre réponse, :D
mais je souhaiterai ne pas passer par la ligne de commande car il faut être root pour lancer cette commande. Et cette ligne serait intégré à une machine X qui se connecterai au serveur OPSI en SSH avec un utilisateur qui n'est pas root :| et dont les identifiants sont déjà écris en clair dans le script. Je souhaite éviter de laisser en clair dans un script python des identifiants root. :?

r.roeder
Beiträge: 420
Registriert: 02 Jul 2008, 10:08

Re: Récupération d'information ordinateur via l'API RPC

Beitragvon r.roeder » 22 Okt 2014, 19:17

jroch hat geschrieben:un utilisateur qui n'est pas root


il ne faut être root pour lancer une opsi-admin commande, mais un membre de la groupe opsiadmin, et il est même possible que root n'est pas un membre de cette groupe et ne peut pas lancer cette commande! Ça est la solution pour votre problème?

Bien à vous
Rupert
opsi support - uib gmbh
For productive opsi installations we recommend maintainance + support contracts which are the base of opsi development.


Wondering who's using opsi? Have a look at the opsi map: http://opsi.org/opsi-map/.

jroch
Beiträge: 10
Registriert: 21 Okt 2014, 18:06

Re: Récupération d'information ordinateur via l'API RPC

Beitragvon jroch » 23 Okt 2014, 13:59

Merci pour votre retour, en fait je souhaiterai passer par l'API JSON RPC mais je ne sais pas comment l’interroger en python.
Ce n'est pas très documenté. :shock:

jroch
Beiträge: 10
Registriert: 21 Okt 2014, 18:06

Re: Récupération d'information ordinateur via l'API RPC

Beitragvon jroch » 23 Okt 2014, 17:59

En fait je souhaiterai savoir qu'elle est l'URL pour dialogué via RPC . Quand j'utilise cette url : http://opsiserveur/rpc sa ne fonctionne pas.

Lorsque je saisie cette url : http://opsiserveur/rpc?{%20"method":%20"productOnClient_getHashes",%20"params":%20[],%20"id":%201%20,%20"actionRequest":%20"setup"} je n'est aucune réponse .. :o

jroch
Beiträge: 10
Registriert: 21 Okt 2014, 18:06

Re: Récupération d'information ordinateur via l'API RPC

Beitragvon jroch » 04 Nov 2014, 11:18

Bonjour à tous, j'ai trouvé la solution !!

Si vous souhaitez comme moi réaliser des actions avec le RPC d'OPSI en python.
Dans cette exemple, j’effectue une requête RPC au serveur OPSI avec cette méthode : productOnClient_getHashes

Code: Alles auswählen

         from os import *
         from sys import *

         import httplib
         import base64
         import string
         import json
         
         def main():
                 payload = {"method": "[b]productOnClient_getHashes[/b]","params": [],"id":1} 
                 auth = "Basic "+base64.encodestring('[b]login[/b]:[b]password[/b]')
                 headers={'Content-type': 'application/json','Authorization':auth}
                 conn = httplib.HTTPSConnection('[b]opsi-server.foo[/b]',4447)
                 conn.request("POST", "/rpc",json.dumps(payload),headers)
                 response = conn.getresponse()
                  ##print response.status, response.reason
                 data = json.loads(response.read())
                 for line in data['result']:
                         if line['actionRequest'] == 'setup':
                              print line
                  conn.close()   

         if __name__ == "__main__":
              main()

Le résultat chez moi est :

Code: Alles auswählen

{u'installationStatus': u'installed', u'actionProgress': u'', u'actionResult': u'successful', u'clientId': u'computer-name.yourdomain.fr', u'modificationTime': u'2014-06-26 19:16:42', u'actionRequest': u'setup', u'targetConfiguration': u'installed', u'productVersion': u'1.7.0u21', u'productType': u'LocalbootProduct', u'lastAction': u'setup', u'packageVersion': u'3', u'actionSequence': -1, u'type': u'ProductOnClient', u'productId': u'javavm_7'}
....
....
....


En tout cas, merci beaucoup pour votre aide et les pistes que vous m'avez données !! :D