kurioses Problem mit ServiceCalls
kurioses Problem mit ServiceCalls
ich habe ein kurioses Problem bzw. einen Bug, bei dem ich nicht weiter komme.
Ausgangspunkt ist das Paket o4i_firefox-esr. Die Propertys von o4i_firefox-esr werden mit einem weiteren Paket (Name: topqw) via ServiceCall verändert. Konkret trage ich den Namen eines Zertifikates in die Property von o4i_firefox-esr ein und setze es auf update.
Das hat bis jetzt auch ohne Probleme funktioniert. Heute habe ich aufgrund von neuen Zertifikaten die Propertys von topqw geändert. Leider werden in die Propertys von o4i_firefox-esr nicht die neuen, sondern die alten Zertifikate eingetragen.
Weder in der control-Datei, noch in den Propertys von o4i_firefox-esr oder topqw steht noch etwas vom alten Zertifikat. Die Propertys in opsi-configed - Depot-Konfiguration habe ich mehrfach geprüft. Dort gibt es das alte Zertifikat nicht mehr.
Ich habe Clients getestet, auf denen das alte Zertifikat nie installiert war, und trotzdem wird es in die Propertys von o4i_firefox-esr eingetragen.
In einem weiteren Test habe ich das Paket o4i_firefox-esr unter dem neuen Namen o4i_firefox-esr2 installiert und die Propertys mit meinem Paket topqw ändern lassen. Das hat funktioniert.
Fazit: Ändere ich mit dem gleichen Paket / der gleichen Funktion die Propertys von o4i_firefox-esr, wird das alte Zertifikat eingetragen. Ändere ich die Propertys von o4i_firefox-esr2, funktioniert alles wie gewünscht.
Für mich sieht es so aus, als ob irgendwo etwas gecacht oder gespeichert ist. Hat jemand eine Idee zu diesem kuriosen Problem? Der Server läuft bereits auf 4.3.
Viele Grüße
- j.schneider
- uib-Team
- Beiträge: 2043
- Registriert: 29 Mai 2008, 15:14
Re: kurioses Problem mit ServiceCalls
sehr seltsam.
Können wir dazu einmal den Skript-Auszug haben, mit dem die Properties gesetzt werden?
Grüße
Jan Schneider
Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.
Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.
uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de
Re: kurioses Problem mit ServiceCalls
Mir ist heute wieder eingefallen, was ich mir damals bei der Erstellung meiner Funktion gedacht habe. Die Funktion setzt nicht nur Propertys, sie prüft auch welche Werte gerade in der Property stehen, damit es nicht zu doppelten Einträgen kommt. Außerdem werden die Standardpropertys ausgelesen, wenn der ResultString [] ist.
Hier ein Teil der Funktion:
Code: Alles auswählen
Set $ResultList$ = getReturnListFromSection("opsiServiceCall_productPropertyState_getObjects")
Set $ResultString$ = takestring(0, $ResultList$)
if $ResultString$ = "[]"
comment "got no value for Client, trying to get default value"
Set $ResultList$ = getReturnListFromSection("opsiServiceCall_productProperty_getObjects")
Set $ResultString$ = takestring(0, $ResultList$)
if $ResultString$ = "[]"
LogError "got no information from Service"
isFatalError
endif
endif
if not(jsonIsValid($ResultString$))
LogError "got no valid json from Service"
isFatalError
endif
if not(jsonIsArray($ResultString$))
LogError "got no json Array from Service"
isFatalError
endif
[opsiServiceCall_productPropertyState_getObjects]
"method": "productPropertyState_getObjects"
"params": [
"[]",
'{"productId":"o4i_firefox-esr","objectId":"%hostId%","propertyId":"$PolicyName$"}'
]
[opsiServiceCall_productProperty_getObjects]
"method": "productPropertyState_getObjects"
"params": [
"[]",
'{"productId":"o4i_firefox-esr","propertyId":"$PolicyName$"}'
]
Mir ist dann im Log aufgefallen, das der ServiceCall opsiServiceCall_productProperty_getObjects aus meinem Skript die Propertys aller Clients anzeigt, auf dem o4i_firefox-esr installiert ist. Eigentlich will ich aber nur die Standardwerte des Pakets haben.
Code: Alles auswählen
(5652) [5] [2024-01-11 07:43:59.782] [lra_topqw] comment: got no value for Client, trying to get default value
(5653) [6] [2024-01-11 07:43:59.783] [lra_topqw] "method": "productPropertyState_getObjects"
(5654) [6] [2024-01-11 07:43:59.793] [lra_topqw] HTTPSender Post succeeded
(5655) [6] [2024-01-11 07:43:59.793] [lra_topqw] Server-FQDN: 10.1.211.13 Server-IP: 10.1.211.13
(5656) [6] [2024-01-11 07:43:59.793] [lra_topqw] JSON Bench for productPropertyState_getObjects "params":[[],{"propertyId":"policy_certificates"," Start: 07:43:59:783 Time: 00:00:00:010
(5657) [6] [2024-01-11 07:43:59.798] [lra_topqw] JSON result: [{"propertyId":"policy_certificates","ident":"o4i_firefox-esr;policy_certificates;nb2003.domain.de","values":["ImportEnterpriseRoots"],"productId":"o4i_firefox-esr","objectId":"nb2003.domain.de","type":"ProductPropertyState"},{"propertyId":"policy_certificates","ident":"o4i_firefox-esr;policy_certificates;nb2018.domain.de","values":["ImportEnterpriseRoots","\\\\\\\\link01\\\\opsi_cert2\\\\NetscalerNeu.cer","\\\\\\\\link01\\\\opsi_cert1\\\\CNFTTHLV-ServerCertificationAuthority2.crt"],"productId":"o4i_firefox-esr","objectId":"nb2018.domain.de","type":"ProductPropertyState"},{"propertyId":"policy_certificates","ident":"o4i_firefox-esr;policy_certificates; ............
(5658) [6] [2024-01-11 07:43:59.804] [lra_topqw] The value of the variable "$ResultString$" is now: "[{"propertyId":"policy_certificates","ident":"o4i_firefox-esr;policy_certificates;nb2003.domain.de","values":["ImportEnterpriseRoots"],"productId":"o4i_firefox-esr","objectId":"nb2003.domain.de","type":"ProductPropertyState"},{"propertyId":"policy_certificates","ident":"o4i_firefox-esr;policy_certificates;nb2018.domain.de","values":["ImportEnterpriseRoots","\\\\\\\\link01\\\\opsi_cert2\\\\NetscalerNeu.cer","\\\\\\\\link01\\\\opsi_cert1\\\\CNFTTHLV-ServerCertificationAuthority2.crt"],"productId":"o4i_firefox-esr","objectId":"nb2018.domain.de","type":"ProductPropertyState"},{"propertyId":"policy_certificates","ident":"o4i_firefox-esr;policy_certificates;nb2030.domain.de","values":[],"productId":"o4i_firefox-esr" ............
(5659) [6] [2024-01-11 07:43:59.804] [lra_topqw] If
(5660) [6] [2024-01-11 07:43:59.804] [lra_topqw] $ResultString$ = "[]" <<< result false
(5661) [6] [2024-01-11 07:43:59.804] [lra_topqw] Then
(5662) [6] [2024-01-11 07:43:59.805] [lra_topqw] EndIf
(5663) [6] [2024-01-11 07:43:59.805] [lra_topqw] EndIf
(5664) [6] [2024-01-11 07:43:59.805] [lra_topqw] If
(5665) [6] [2024-01-11 07:43:59.807] [lra_topqw] not(jsonIsValid($ResultString$)) <<< result false
(5666) [6] [2024-01-11 07:43:59.807] [lra_topqw] Then
(5667) [6] [2024-01-11 07:43:59.807] [lra_topqw] EndIf
(5668) [6] [2024-01-11 07:43:59.807] [lra_topqw] If
(5669) [6] [2024-01-11 07:43:59.810] [lra_topqw] not(jsonIsArray($ResultString$)) <<< result false
(5670) [6] [2024-01-11 07:43:59.810] [lra_topqw] Then
(5671) [6] [2024-01-11 07:43:59.810] [lra_topqw] EndIf
Code: Alles auswählen
opsi-admin -d method productProperty_getObjects [] '{"productId":"o4i_firefox-esr","propertyId":"policy_certificates"}'
[
{
"description": "Configure certificates\nSettings:\nImportEnterpriseRoots = read certificates from the system certificate store\nImport Certificates /var/lib/opsi/depot/o4i_firefox-esr/custom/certificates e.g. \"Custom.crt\"\nImport Certificates from UNC path e.g. \"\\\\\\\\server\\\\certificates\\\\Name.crt\"",
"possibleValues": [
"Custom.crt",
"ImportEnterpriseRoots",
"\\\\server\\certificates\\Name.crt"
],
"defaultValues": [],
"editable": true,
"multiValue": true,
"productId": "o4i_firefox-esr",
"productVersion": "115.6.0",
"packageVersion": "5",
"propertyId": "policy_certificates",
"type": "UnicodeProductProperty",
"ident": "o4i_firefox-esr;115.6.0;5;policy_certificates"
}
]
Viele Grüße
Re: kurioses Problem mit ServiceCalls
Wichtig ist hier der Unterschied zwischen productProperty_getObjects und productPropertyState_getObjects.
ProductProperty-Objekte sind die allgemeingültige Grundlage. ProductPropertyState-Objekte sind spezifisch für einen host (Client oder Depot).
Ich bin zuversichtlich, dass productPropertyState_getObjects per opsi-admin die gleichen Ergebnisse produziert wie per opsi-script.
In dem Log-Ausschnitt unten wird productPropertyState_getObjects scheinbar ohne eine Einschränkung auf einen spezifischen Host gerufen, weshalb die Objekte für alle Hosts zurückgegeben werden.
Ich habe eine Vermutung woran das Problem liegen könnte. Unter opsi 4.2 hat productPropertyState_getObjects gar nicht wirklich nur die productPropertyState Objekte des ausgewählten Hosts zurückgegeben, sondern falls kein entsprechendes Objekt vorhanden war, das entsprechende Objekt des zugeordneten Depots durchgereicht. Analoges Verhalten kann man unter opsi 4.3 bekommen, indem stattdessen productPropertyState_getValues genutzt wird.
Allerdings möchte ich noch ergänzen, dass es problematisch sein kann, aus einem opsi-Paket heraus, die Backend-Daten für ein anderes opsi-Paket zu verändern (schwierige Handhabe verschiedener Depots, Probleme im WAN-Modus, etc.). Solche Dinge sind sauberer auf server-Seite zu lösen (Skript/opsi-cli-Plugin/opsi-configed/opsi-webgui)
Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.
Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.
uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de