Produktstatus löschen

Antworten
spynick
Beiträge: 3
Registriert: 22 Jun 2017, 13:09

Produktstatus löschen

Beitrag von spynick »

Hallo zusammen

Wir setzen als OS-Verteilung MDT ein und die SW soll mit OPSI verteilt werden. Vorteil von MDT sind die einfach anpassbaren Tasksequenzen, da kann man schnell etwas ausprobieren und Abhängigkeiten definieren.

Das klappt ganz gut, den Client installieren wir in der Tasksequenz als Applikation, funktioniert einwandfrei. Wenn sich der Client beim Server meldet wird der Client automatisch einigen Bundles zugewiesen, abhängig vom Hostnamen - klappt auch super. Nach der Installation des Clients starten wir den Dienst opsiclientd und sind sofort ohne Reboot für die SW-Verteilung erreichbar. Per Powershell greifen wir mit JSON auf die RPC-Schnittstelle von OPSI zu und schicken uns selbst ein "on_demand" event. Somit werden die Bundles nach dem Agent gleich verteilt.

Alles super, aber bei einer Neuinstallation des Clients muss ich vorher das Clientobject aus OPSI werfen, damit alles klappt. Ich suche jetzt die Möglichkeit einerseits den Stand von "installed" auf leer zu setzen und gleichzeitig das Attribut von "none" auf setup zu stellen. Somit kann sich jeder seinen Client neu installieren ohne dass ich in OPSI tätig werden müsste. Wenn man es genau betrachtet müsste ich die Werte sozusagen invertieren, dann wäre das "elegant" gelöst.

An sich gefällt mir OPSI aufgrund der vielfältigen Möglichkeiten sehr gut. Durch unser Konzept alles mit DNS-Aliasen zu machen, benötigen wir keine Depotserverzuweisungen sondern lösen es einfach mit dem DNS (shortname) für Samba, FQDN für OPSI URL. Die Depotserver in den Lokationen werden mit rsync aktuell gehalten, somit eigentlich nur Samba/CIFS Shares erforderlich. Das restliche Gedöns können wir uns sparen.

Herzlichen Dank für nen Tipp

LG

Stefan
holgerv
Beiträge: 288
Registriert: 20 Aug 2012, 09:35

Re: Produktstatus löschen

Beitrag von holgerv »

spynick hat geschrieben:[...] Ich suche jetzt die Möglichkeit einerseits den Stand von "installed" auf leer zu setzen und gleichzeitig das Attribut von "none" auf setup zu stellen. [...]
Um einen ActionRequest auf "setup" zu stellen, kannst Du Folgendes tun:

Code: Alles auswählen

[Actions]
DefVar $Produktname$
Set $Produktname$ = "Beispielprodukt"
opsiServiceCall_setProductToSetup

[opsiServiceCall_setProductToSetup]
        "method": "setProductActionRequest"
        "params": [
                "$Produktname$",
                "%HostID%",
                "Setup"
                ]
Den Installationsstatus kannst Du über die Methode "setProductInstallationStatus" setzen.

Schönen Gruß


Holger
spynick
Beiträge: 3
Registriert: 22 Jun 2017, 13:09

Re: Produktstatus löschen

Beitrag von spynick »

Herzlichen Dank, funktioniert das auch mit Bundles? Einzelne Produkte kann ich mir vorstellen
holgerv
Beiträge: 288
Registriert: 20 Aug 2012, 09:35

Re: Produktstatus löschen

Beitrag von holgerv »

spynick hat geschrieben:Herzlichen Dank, funktioniert das auch mit Bundles? Einzelne Produkte kann ich mir vorstellen
Hab ich noch nicht gemacht, aber sieht so aus:

Code: Alles auswählen

$ opsi-admin method list|grep -i actionrequest
Password: 
getClientIds_list(u'*serverId', u'*depotIds', u'*groupId', u'*productId', u'*installationStatus', u'*actionRequest', u'*productVersion', u'*packageVersion', u'*hwFilter')
getClients_listOfHashes(u'*serverId', u'*depotIds', u'*groupId', u'*productId', u'*installationStatus', u'*actionRequest', u'*productVersion', u'*packageVersion', u'*hwFilter')
getProductActionRequests_listOfHashes(u'clientId', u'*options')
productOnClient_create(u'productId', u'productType', u'clientId', u'*installationStatus', u'*actionRequest', u'*lastAction', u'*actionProgress', u'*actionResult', u'*productVersion', u'*packageVersion', u'*modificationTime')
setActionRequestWhereOutdated(u'actionRequest', u'productId')
setActionRequestWhereOutdatedWithDependencies(u'actionRequest', u'productId')
setProductActionRequest(u'productId', u'clientId', u'actionRequest')
setProductActionRequestForHostGroup(u'hostGroupId', u'productId', u'actionRequest')
setProductActionRequestForProductGroup(u'hostGroupId', u'productGroupId', u'actionRequest')
setProductActionRequestWithDependencies(u'productId', u'clientId', u'actionRequest', u'*force')
setProductState(u'productId', u'objectId', u'*installationStatus', u'*actionRequest', u'*productVersion', u'*packageVersion', u'*lastStateChange', u'*productActionProgress')
unsetProductActionRequest(u'productId', u'clientId')
Ich würde es mit "setProductActionRequestForProductGroup" versuchen.

... ach ja: Statt "setProductActionRequest" (in meinem ersten Beispiel) musst Du ggf. "setProductActionRequestWithDependencies" verwenden, dann werden auch Abhängigkeiten berücksichtigt.

Viel Erfolg!
spynick
Beiträge: 3
Registriert: 22 Jun 2017, 13:09

Re: Produktstatus löschen

Beitrag von spynick »

Moin zusammen

Hab ne Lösung für mein Problem gefunden. Das Script holt alle installierten/zugewiesenen Produkte und ändert den Status auf setup - mit Ausnahme von "opsi-client-agent" und "opsi-winst". Die werden beim eigentlichen Setup bereits installiert.

Code: Alles auswählen

$urlJSON = 'https://<servername>:4447/rpc'
$myFQDN=((Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain).tolower()
Write-Host $myFQDN
$authUser = "adminuser"
$authPass = "Passwort"
$method = "getInstalledLocalBootProductIds_list"
$params = @($myFQDN)

Function CallJSON($url,$object,$authUser,$authPass,$method,$params) {
    $cred = New-Object System.Net.NetworkCredential -ArgumentList $authUser,$authPass
    $bytes = [System.Text.Encoding]::ascii.GetBytes($object)
    $web = [System.Net.WebRequest]::Create($url)
    [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
    $web.Method = "POST"
    $web.ContentLength = $bytes.Length
    $web.ContentType = "application/json"
    $web.Credentials = $cred
    $stream = $web.GetRequestStream()
    $stream.Write($bytes,0,$bytes.Length)
    $stream.close()
    $reader = New-Object System.IO.Streamreader -ArgumentList $web.GetResponse().GetResponseStream()
    return $reader.ReadToEnd()| ConvertFrom-Json | select-object result | select-object -expandproperty result | out-string
    $reader.Close()
}

$data = (New-Object PSObject |
    Add-Member -PassThru NoteProperty method $method |
    Add-Member -PassThru NoteProperty params $params |
    Add-Member -PassThru NoteProperty id '1') | ConvertTo-Json -depth 3
 
$request = CallJSON $urlJSON $data $authUser $authPass $method $params
$request -split ('\r\n') | ForEach {
    if ( $_ ) {
        if (( $_ -notcontains "opsi-client-agent" ) -and ( $_ -notcontains "opsi-winst" )) { 
            write-host "Product:" $_
            $method = "setProductActionRequest"
            $params = @($_,$myfqdn,"setup")
            $data = (New-Object PSObject |
                Add-Member -PassThru NoteProperty method $method |
                Add-Member -PassThru NoteProperty params $params |
                Add-Member -PassThru NoteProperty id '1') | ConvertTo-Json -depth 3
            $delete = CallJSON $urlJSON $data $authUser $authPass $method $params
            $method = "setProductInstallationStatus"
            $params = @($_,$myfqdn,"not_installed")
            $data = (New-Object PSObject |
                Add-Member -PassThru NoteProperty method $method |
                Add-Member -PassThru NoteProperty params $params |
                Add-Member -PassThru NoteProperty id '1') | ConvertTo-Json -depth 3
            $delete = CallJSON $urlJSON $data $authUser $authPass $method $params

        }
    }
 }

Somit kann ich weiterhin via MDT den Client installieren und per Opsi die SW-Verteilung machen. Wir haben uns bewusst gegen Opsi als OS-Verteilung entschieden, da bei MDT keine Clientregistrierungen erforderlich sind. Der Hostname wird automatisch aus DNS und MAC-Adresse gebildet und auch die Ländereinstellungen und OU für das Computerkonto werden so dynamisch generiert.

OPSI selbst finde ich Klasse, mir gefällt an den ganzen Lösungen, egal welcher Art nicht, dass der Client erst registriert werden muss, bevor man ein OS installieren kann. Ist bei anderen Lösungen leider auch so. Als Admin ist es mir egal, wenn jemand einen Client installieren will - gut mag von IT-Sicherheit her bedenklich sein, aber der Client sieht dann so aus wie wir es möchten. Der Benutzer benötigt immer noch Benutzername usw. Lösungen wie OPSI sollten so einfach wie möglich sein für den Benutzer, als Admin oder Supporter haben wir wichtigere Aufgaben als Clients zu installieren und registrieren, das muss einfach laufen. Aus meiner Sicht muss auch ne Sekretärin in der Lage sein ohne grossen Aufwand ihren Rechner neu installieren zu können, mit dem Drücken von F12 (Netzwerkboot) und anschliessender Kaffeepause geht das - aber sobald Benutzerangaben /-eingaben erforderlich sind ist es bereits eine potentielle Fehlerquelle zuviel....

In diesem Sinne, herzlichen Dank Holger für Deine Tipps.

LG

Stefan
Benutzeravatar
ueluekmen
uib-Team
Beiträge: 1939
Registriert: 28 Mai 2008, 10:53

Re: Produktstatus löschen

Beitrag von ueluekmen »

Hallo Stefan,

interessantes Setup. Kurz zu:
spynick hat geschrieben:Lösungen wie OPSI sollten so einfach wie möglich sein für den Benutzer
so einfach wie möglich beißt sich halt leider mit: so komplett wie möglich. Mag sein, dass einige Dinge einfacher zu machen sind. Wie in deinem Fall, kann man aber sehr wohl auch opsi mit anderen Systemen mischen. Kleiner Tip aus der Praxis, der Schlüssel liegt bei opsi in der Automatisierung. Je nach dem was man braucht, kann man opsi an die Gegebenheiten anpassen. Wir bieten auch fortgeschrittenen Kurse an, wo es richtig ins eingemachte geht. Vielleicht ist im Schulungsangebot für den ein oder anderen noch was dabei.
spynick hat geschrieben:Aus meiner Sicht muss auch ne Sekretärin in der Lage sein ohne grossen Aufwand ihren Rechner neu installieren zu können
Dazu sage ich jetzt nicht viel, außer Mutige Einstellung für einen Admin ;)
opsi support - uib gmbh
For productive opsi installations we recommend support contracts.
http://www.uib.de
Antworten