WInst: Wie extrahiert man die Beschreibung eines Hosts?

Antworten
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

WInst: Wie extrahiert man die Beschreibung eines Hosts?

Beitrag von embl-structures »

Hallo zusammen,

ich haenge fest beim Versuch, innerhalb eines WInst-Skriptes einer Variable den Wert der Beschreibung ("description") eines Rechners zuzuweisen. Mit

Code: Alles auswählen

method host_getObjects [] {"id":"pc.meine.domain"}
bekomme ich das Objekt des PCs "pc.meine.domain". Das kann ich in einen OpsiServiceCall umformen. Wahrscheinlich (untgetestet) etwa so:

Code: Alles auswählen

[opsiservicecall_clientIdsList]
"method":"host_getObjects"
"params":[
           [],
           {"id":"pc.meine.domain"}
         ]
Ich moechte aber nur die Beschreibung (also das Feld "description") der Variable zuordnen und ich stehe auf dem Schlauch, wie ich das machen soll. Muss man mit String/Stringlisten-funktionen die Beschreibung extrahieren? Das scheint mir sehr komplex und unschoen (getOutStreamFromSection, alle Zeilen abklappern, testen on "description" vorkommt und dann den String hinter dem Doppelpunkt auslesen). Oder kann man die OPSI-Methode so umformen, dass nur die Beschreibung ausgepuckt wird? Waere schoen, aber ich komme nicht dahinter.

Schon mal Danke fuer alle sachdienlichen Hinweise.
frank
Benutzeravatar
SisterOfMercy
Beiträge: 1524
Registriert: 22 Jun 2012, 19:18

Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?

Beitrag von SisterOfMercy »

Pfff, I'm not getting any further also:

Code: Alles auswählen

https://my-opsiserver.domain.nl:4447/interface?{ "id": 1, "method": "host_getObjects", "params" ["description", {"id": "pc.domain.nl"}] }
Gives this result:

Code: Alles auswählen

{"id": 1,
"result": [{"ident": "pc.domain.nl",
"description": "Toshiba C870-1J6",
"created": null,
"inventoryNumber": null,
"ipAddress": null,
"notes": null,
"oneTimePassword": null,
"lastSeen": null,
"hardwareAddress": null,
"opsiHostKey": null,
"type": "OpsiClient",
"id": "pc.domain.nl"}],
"error": null}
I'm not very good in those OPSI service commands :(
Bitte schreiben Sie Deutsch, when I'm responding in the German-speaking part of the forum!
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?

Beitrag von n.wenselowski »

Hallo,

ich würde mir eine kleine Backend-Erweiterung schreiben, die für einen Host dessen Beschreibung zurückliefert.
Dann muss man nicht aufwändig mit Listen hantieren, sondern bekommt nur das zurück, was man auch benötigt.

Code: Alles auswählen

def host_getDescription(self, hostId):
    hosts = [host['description'] for host in self.host_getObjects(id=hostId)]
    return hosts[0]
(Aus dem Kopf, muss also nicht funktionieren ;))

Das ganze dann nach /etc/opsi/backendManager/extend.d speichern, bspw. als 41_hostDescription.conf und den Service neu starten.
Entsprechender Teil aus dem Handbuch dazu: http://download.uib.de/opsi_stable/doc/ ... extensions


Gruß

Niko

Code: Alles auswählen

import OPSI
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?

Beitrag von embl-structures »

n.wenselowski hat geschrieben:ich würde mir eine kleine Backend-Erweiterung schreiben, die für einen Host dessen Beschreibung zurückliefert
Interessanter Ansatz. Vielen Dank fuer den Tipp
frank
dkoch
Beiträge: 309
Registriert: 25 Nov 2011, 14:03

Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?

Beitrag von dkoch »

Hier haben hier ein Paket mit Namen lib welches keine Aktionen ausführen kann ( In der Control kein Eintrag bei Setup,Uninstall etc) und pflegen damit solche Scripte um sie leichter in andere Pakete einbauen zu können.

OPSI/control

Code: Alles auswählen

[Package]
version: 1
depends: 
incremental: False

[Product]
type: localboot
id: lib
name: lib
description: 
advice: 
version: 1.2
priority: 0
licenseRequired: False
productClasses: 
setupScript: 
uninstallScript: 
updateScript: 
alwaysScript: 
onceScript: 
customScript: 
userLoginScript: 

[Changelog]
lib (1.0-1) testing; urgency=low

  * Initial package

 -- dkoch <dkoch@westpfalz-klinikum.de>  Wed, 20 Nov 2013 14:57:16 +0000
CLIENT_DATA/get_host_info/get_host_info.opiscript

Code: Alles auswählen

include_append "%scriptdrive%\lib\get_host_info\opsiservicecall_gethosthash.opsiscript"

DefVar $hostId$
DefVar $description$
DefVar $created$
DefVar $inventoryNumber$
DefVar $notes$
DefVar $hardwareAddress$
DefVar $lastSeen$
DefVar $oneTimePassword$
DefVar $opsiHostKey$
DefVar $ipAddress$

DefStringlist $hosthash$

Set $hosthash$ = getReturnListFromSection("opsiservicecall_gethosthash")

set $hostId$          = getValue("hostId",$hosthash$)
set $description$     = getValue("description",$hosthash$)
set $created$         = getValue("created",$hosthash$)
set $inventoryNumber$ = getValue("inventoryNumber",$hosthash$)
set $notes$           = getValue("notes",$hosthash$)
set $hardwareAddress$ = getValue("hardwareAddress",$hosthash$)
set $lastSeen$        = getValue("lastSeen",$hosthash$)
set $oneTimePassword$ = getValue("oneTimePassword",$hosthash$)
set $opsiHostKey$     = getValue("opsiHostKey",$hosthash$)
set $ipAddress$       = getValue("ipAddress",$hosthash$)
CLIENT_DATA/get_host_info/opsiservicecall_gethosthash.opsiscript

Code: Alles auswählen

[opsiservicecall_gethosthash]
"method":"getHost_hash"
"params": [
          "%hostid%"
          ]

Diese Paket wird auf allen Depots installiert. Danach kannst du in dein Script(e) mit

Code: Alles auswählen

include_insert "%scriptdrive%\lib\get_host_info\get_host_info.opsiscript"
die Funktion aufrufen.
Durch das Einbinden werden diese Variablen definiert und gesetzt:
  • hostId
  • description
  • created
  • inventoryNumber
  • notes
  • hardwareAddress
  • lastSeen
  • oneTimePassword
  • opsiHostKey
  • ipAddress
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?

Beitrag von embl-structures »

dkoch hat geschrieben:Hier haben hier ein Paket mit Namen lib welches keine Aktionen ausführen kann ( In der Control kein Eintrag bei Setup,Uninstall etc) und pflegen damit solche Scripte um sie leichter in andere Pakete einbauen zu können.
Ein aehnlicher Ansatz wie ich ihn mit meinen globalen Skripten pflege. Gute Idee :-)

dkoch hat geschrieben:

Code: Alles auswählen

include_append "%scriptdrive%\lib\get_host_info\opsiservicecall_gethosthash.opsiscript"
[...]
" "%scriptdrive%\lib\" ist viel besser als mein "%ScriptPath%\..\global\Skriptname", was ich fuer meine globalen Skripte verwende. Das werde ich so uebernehmen.

Warum verwendet ihr "include_append" statt "sub "%scriptdrive%\lib\get_host_info\opsiservicecall_gethosthash.opsiscript"" am Ende des Skriptes?
dkoch hat geschrieben:

Code: Alles auswählen

[...]
Set $hosthash$ = getReturnListFromSection("opsiservicecall_gethosthash")

set $hostId$          = getValue("hostId",$hosthash$)
set $description$     = getValue("description",$hosthash$)
set $created$         = getValue("created",$hosthash$)
set $inventoryNumber$ = getValue("inventoryNumber",$hosthash$)
set $notes$           = getValue("notes",$hosthash$)
set $hardwareAddress$ = getValue("hardwareAddress",$hosthash$)
set $lastSeen$        = getValue("lastSeen",$hosthash$)
set $oneTimePassword$ = getValue("oneTimePassword",$hosthash$)
set $opsiHostKey$     = getValue("opsiHostKey",$hosthash$)
set $ipAddress$       = getValue("ipAddress",$hosthash$)
...und im Grunde genommen soo einfach... :-)


Vielen Dank
frank
dkoch
Beiträge: 309
Registriert: 25 Nov 2011, 14:03

Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?

Beitrag von dkoch »

embl-structures hat geschrieben: Warum verwendet ihr "include_append" statt "sub "%scriptdrive%\lib\get_host_info\opsiservicecall_gethosthash.opsiscript"" am Ende des Skriptes?
Die Funktionsweise ist auch mit Sub weiterhin gegeben. include_append macht meiner Meinung nach Subsektionen aber eigentlich komplett Überflüssig deswegen verwende ich auch keine mehr.
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?

Beitrag von embl-structures »

dkoch hat geschrieben:

Code: Alles auswählen

DefVar $hostId$
DefStringlist $hosthash$

Set $hosthash$ = getReturnListFromSection("opsiservicecall_gethosthash")

set $hostId$ = getValue("hostId",$hosthash$)

[opsiservicecall_gethosthash]
"method":"getHost_hash"
"params": [
          "%hostid%"
          ]
Auf den zweiten Blick bin ich doch verwundert, dass das funktioniert, denn "opsi-admin -d method getHost_hash <hostid>" gibt die Schluessel-Werte-Paare mit Doppelpunkt getrennt aus. "GetValue" will aber "=" als Trennzeichen. Nach Handbuch muesste man also eigentlich

Code: Alles auswählen

set $hostId$ = getValueBySeparatpr("hostId", ":", $hosthash$)
verwenden. Der OPSIServiceCall macht aber offenbar aus den ":" "=". Undokumentiertes Feature?

frank
Antworten