Seite 1 von 1
WInst: Wie extrahiert man die Beschreibung eines Hosts?
Verfasst: 07 Jan 2014, 20:16
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
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
Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?
Verfasst: 07 Jan 2014, 22:18
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

Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?
Verfasst: 08 Jan 2014, 09:57
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
Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?
Verfasst: 08 Jan 2014, 11:18
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
Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?
Verfasst: 10 Jan 2014, 08:55
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
Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?
Verfasst: 10 Jan 2014, 10:20
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
Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?
Verfasst: 10 Jan 2014, 10:47
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.
Re: WInst: Wie extrahiert man die Beschreibung eines Hosts?
Verfasst: 10 Jan 2014, 19:33
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