Report State löschen per opsiadmin -d method

The place for development of / with / for opsi.
Post your API questions here!
Antworten
MyLive
Beiträge: 19
Registriert: 27 Mär 2018, 15:41

Report State löschen per opsiadmin -d method

Beitrag von MyLive »

Ich habe den Therad:

viewtopic.php?t=3080

gefunden und kommentiert. Es funktioniert leider nicht darüber den Report Status zurückzusetzen.

Mit welcher method kann ich dieses für einen Host & ein LocalBoot oder Netboot Produkt erreichen ?


Vielen lieben Dank,
René
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: Report State löschen per opsiadmin -d method

Beitrag von n.wenselowski »

Hi René,

der Report lässt sich mit productOnClient_updateObject leeren:

Code: Alles auswählen

opsi-admin -d method productOnClient_updateObject '{"type": "ProductOnClient", "productType": "NetbootProduct", "productId": "win7-x64", "clientId": "niko-client2.uib.local", "actionResult": ""}'

Gruß

Niko

Code: Alles auswählen

import OPSI
MyLive
Beiträge: 19
Registriert: 27 Mär 2018, 15:41

Re: Report State löschen per opsiadmin -d method

Beitrag von MyLive »

Hi Niko,

Funktioniert.
ist es möglich in einer der nächsten OPSI Versionen die Methode

Code: Alles auswählen

setProductState
um einen optionalen Parameter zu erweitern :-) der den Result zurücksetzt.

Vielen Dank für die Hilfe,
René
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: Report State löschen per opsiadmin -d method

Beitrag von n.wenselowski »

Hi René,

ich denke nicht, dass wir so etwas einbauen, weil es von unserer Seite aktuell keinen Nutzen gibt und ich das Zurücksetzen des Reports als relativ selten benötigt ansehe. Das ist mit Pflege und Tests dann doch ein bisschen zu großer Aufwand für uns.

Du kannst aber eine eigene Erweiterung bauen, die genau das macht.
Wenn du den folgenden Code nach /etc/opsi/backendManager/extend.d/80_meine_methoden.conf speicherst (opsi-set-rights nicht vergessen), dann kannst du die Methode resetReport mit den Parametern clientId und productId aufrufen.

Code: Alles auswählen

# -*- coding: utf-8 -*-

def resetReport(self, clientId, productId):
    poc = self.productOnClient_getHashes(productId=productId, clientId=clientId)
    try:
        poc = poc[0]
    except IndexError:
        # No matching poc -> no report
        return
    
    poc['actionResult'] = ""
    self.productOnClient_updateObject(poc)
(Code ist aus dem Kopf geschrieben & ungetestet, kann also noch Käfer enthalten)

Aufruf dann in etwa so:

Code: Alles auswählen

opsi-admin -d method resetReport mein.client.fqdn win7-x64

Gruß

Niko

Code: Alles auswählen

import OPSI
MyLive
Beiträge: 19
Registriert: 27 Mär 2018, 15:41

Re: Report State löschen per opsiadmin -d method

Beitrag von MyLive »

Klappt leider nicht, Report status bleibt weiter bestehen

Hab mir auch die Funktion 20_legacy.conf angesehen und eine neue gebaut

Code: Alles auswählen

def clearProductState(self, productId, objectId):
        installationStatus = "not_installed"
        actionRequest = None
        productVersion = None
        packageVersion = None
        lastStateChange = None
        productActionProgress = None
        actionResult = None

        depotId = self.getDepotId(clientId=objectId)
        productType = None
        for productOnDepot in self.productOnDepot_getObjects(depotId=depotId, productId=productId):
                productType = productOnDepot.productType

        if not productType:
                from OPSI.Exceptions import BackendMissingDataError
                raise BackendMissingDataError("Product '%s' not found on depot '%s'" % (productId, depotId))

        self.productOnClient_updateObjects(
                ProductOnClient(
                        productId=productId,
                        productType=productType,
                        clientId=objectId,
                        installationStatus=installationStatus,
                        actionRequest=actionRequest,
                        actionProgress=productActionProgress,
                        actionResult=actionResult,
                        productVersion=productVersion,
                        packageVersion=packageVersion,
                        modificationTime=lastStateChange
                )
        )

Setze im endeffeckt alles auf "None". Er löscht auch alles, nur den "actionResult" nicht

PackageVersion:

Code: Alles auswählen

dpkg -l |grep opsi
ii  opsi-configed                        4.0.7.6.34-2                               all          OPSI config editor
ii  opsi-linux-bootimage                 20180713-1                                 all          opsi bootimage for netboot tasks.
ii  opsi-server                          4.1.1.4-10                                 all          opsi server configuration package
ii  opsi-tftpd-hpa                       5.2.8-47                                   amd64        HPA's tftp server
ii  opsi-utils                           4.1.1.19-2                                 all          utilites for working with opsi.
ii  opsiconfd                            4.1.1.10-7                                 all          opsi configuration service
ii  opsipxeconfd                         4.1.1.13-1                                 all          opsi pxe configuration daemon
ii  python-opsi                          4.1.1.40-1                                 all          opsi python library
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: Report State löschen per opsiadmin -d method

Beitrag von n.wenselowski »

Hi,

ich würde dann einfach mal debuggen was genau ihm nicht schmeckt.
Gibt es Fehlermeldungen?
Falls nicht: Bei opsi-admin würde ich -l 7 (oder sogar -l 8, wenn ersteres nicht hilft) mitgeben und schauen, was er tut.

Kleine Idee an der Stelle noch: Ändere das Setzen des Werts mal auf das hier:

Code: Alles auswählen

poc['actionResult'] = " "
Ansonsten: None-Werte werden Update an vielen Stellen ignoriert und nur die Teile mit Werten verarbeitet - ob der Wert dabei im Prinzip leer ist, ist dann meist egal.


Gruß

Niko

Code: Alles auswählen

import OPSI
MyLive
Beiträge: 19
Registriert: 27 Mär 2018, 15:41

Re: Report State löschen per opsiadmin -d method

Beitrag von MyLive »

Hallo Niko,

fixed :-)

Code: Alles auswählen

def clearProductState(self, productId, objectId):
        installationStatus = "not_installed"
        actionRequest = None
        productVersion = None
        packageVersion = None
        lastStateChange = None
        productActionProgress = " "
        actionResult = None

        depotId = self.getDepotId(clientId=objectId)
        productType = None
        for productOnDepot in self.productOnDepot_getObjects(depotId=depotId, productId=productId):
                productType = productOnDepot.productType

        if not productType:
                from OPSI.Exceptions import BackendMissingDataError
                raise BackendMissingDataError("Product '%s' not found on depot '%s'" % (productId, depotId))

        self.productOnClient_updateObjects(
                ProductOnClient(
                        productId=productId,
                        productType=productType,
                        clientId=objectId,
                        installationStatus=installationStatus,
                        actionRequest=actionRequest,
                        actionProgress=productActionProgress,
                        actionResult=actionResult,
                        productVersion=productVersion,
                        packageVersion=packageVersion,
                        modificationTime=lastStateChange
                )
        )
läuft :-)
Antworten