Entsorgung von Hardware
-
Hallo zusammen,
wie geht man am sinnvollsten vor, wenn Hardware entsorgt wird?
Wir haben unsere Geräte (Client, Monitor, Drucker, …) diversen Arbeitsplätzen zugeordnet. Tausche ich nun ein Gerät aus, da es defekt ist, gibt es verschiedene Möglichkeiten dies in i-doit abzubilden.- ich suche das Gerät und nutze "Archivieren"
- ich ändere den CMDB-Status auf "verschrottet"
Bei beiden Varianten bleibt das Gerät aber unter dem Arbeitsplatz sichtbar, was im Laufe der Zeit sicherlich unübersichtlich wird. Wie machen da andere? gibt es einen besseren Weg?
Danke und viele Grüße
Thomas -
Hallo Thomas,
genau für diesen Zweck habe ich ein Add-on entwickelt. Ursprünglich für einen Kunden aus dem Krankenkassenbereich. Damit lassen sich die fünf Stufen der Entsorgung abbilden:
1. Einleiten der Entsorgung
2. Fachliche Prüfung
3. Sachliche Prüfung
4. Ausbuchen aus der Anlagenbuchhaltung
5. Entsorgung bei einem DiensleisterJeder Schritt kann einzeln verrechtet werden und wird im Logbuch des Objekts festgehalten. Dazu können auch mit Abschluss jedes Schritts Mails an die entsprechenden Personen versendet werden. Du kannst dir das gerne mal in meiner Demo unter http://i-doit.donamic.de/ mit admin/admin und dem Mandanten "i-doit Schulung" ansehen. Ich habe gerade mal zwei Beispiele für dich angelegt.
Die Objekte können am Ende auch noch den Objekttypen wechseln und automatisch archiviert werden. Die Zuweisung zum Arbeitsplatz wird jedoch weiterhin vorhanden sein. Hier würde ich dann einen Report erstellen, der diese Konstellation (Entsorgt und trotzdem einem Arbeitsplatz zugeordnet) findet und mich darüber benachrichtigt, falls es vergessen wird. Ich nehme das aber zusätzlich noch als weiteres Feature für neue Versionen mit auf.
Alternativ könntest du eventuell über Events und die API erreichen, dass wenn der CMDB-Status "Entsorgt" gesetzt wird (Hook), dass dann auch im Objekt die Zuweisung zum Arbeitsplatz gelöst wird (API). Ansonsten bleibt eigentlich nur die händische Änderung.
Lieben Gruß
Christian -
Hallo Christian,
den "Umweg" über ein eigenes Modul finde ich nicht so glücklich.
Die Idee mit der API-Werde ich mir allerdings mal genauer anschauen. Das könnte gehen und mein Ziel erreichen.Danke für die Idee.
Thomas -
Hallo,
gibt es eine Möglichkeit aus der Detailseite eines Objekts (z.B. Clients) das Objekt zu Archivieren?
Versuche ich dort unter "Allgemein" den CMDB-Status auf "Archiviert" zu setzen, ist dieses nicht auswählbar.Ein Gerät nur aus einer Liste heraus anharken zu können und dann zu Archivieren finde ich ziemlich umständlich. Gibts da einfachere Möglichkeiten?
In der Online-Demo gibt es zumindest die Schaltfläche "Archiviert", die ist allerdings ausgegraut.
Viele Grüße
Thomas -
Hallo Thomas,
nein, das ist aus dem Objekt heraus nicht möglich. Wenn du viele Objekte archivieren willst, geht das noch über die Massenänderung. Aber der funktionierende Weg ist doch viel effizienter als das, was du dir wünscht oder nicht?
Der Weg, der schon geht
- In Liste springen und Objekt aussuchen
- Objekt anhaken
- Archivieren
Der hypothetische Weg über das Objekt, der nicht geht
- In Liste springen und Objekt aussuchen
- Objekt öffnen
- Objekt editieren
- Zustand öffnen
- "Archiviert" auswählen
- Speichern
Der Weg, den du gerne hättest, ist doch viel Klick-intensiver oder verstehe ich deine Frage falsch?
Lieben Gruß
Christian -
Hallo Christian,
häufig bekomme ich nur eine Inventarnummer mit der Info, das dieses Gerät entsorgt wurde.
Also trage ich die Inventarnummer in der Suche oben rechts in i-doit ein. Daraufhin bekomme ich ein Gerät und lande dort in der Detail Seite.
Nun würde ich dort gern das Gerät "Archivieren".
Das Gerät erst nochmals in einer Liste zu suchen finde ich viel umständlicher.Viele Grüße
Thomas -
Hallo Thomas,
das stimmt, aus der Richtung wäre das tatsächlich praktisch. Du könntest höchstens erst mal mit dem CMDB-Status arbeiten und das Gerät dann später auf "archiviert" setzen, aber das wären dann auch zwei Schritte.
Einen anderen Weg kenne ich sonst auch nicht.
Lieben Gruß
Christian -
Hallo zusammen,
es ist zwar schon ziemlich lang her, dass dieses Thema hier behandelt wurde, aber es verfolgt mich noch
Nun ist mir eine andere Idee gekommen, bin mir aber nicht so ganz sicher, ob es möglich ist, bzw. wie das am einfachsten geht.
Ist es möglich über die CLI alle Objekte zu Filtern, die den CMDB-Status "verschrottet" haben und diese dann in den Zustand "archiviert" zu setzen?So könnte dann regelmäßig ein Cronjob laufen.
LG
Thomas -
Hallo Thomas,
das kannst Du gut über die CLI machen. Am besten erstellst Du einen Report der alle Objekte mit CMDB Status = verschrottet enthält. Dann kannste den über console.php in deinem Document Root ausführen lassen und weiterverarbeiten.
Gruss,
Jörg
-
Hallo Jörg,
in der KB von i-doit habe ich zu reports zur gefunden, das man diese exportieren kann. Wie könnte so ein CLI Befehl aussehen?
Gruß
Thomas -
Hi Thomas,
geh mal auf deinen Server in das Dokument Root.
Dann guck dir mal folgendes an:/srv/www/htdocs/console.php report-export --help
Usage:
report-export [options]Options:
-r, --reportId=REPORTID ID of the report
-d, --exportPath=EXPORTPATH Path to export the report into
-f, --exportFilename=EXPORTFILENAME File name of export file, without extension (e.g. .pdf).
Default is the title of the report
-t, --exportFileType=EXPORTFILETYPE File Type of the export. Possible options: csv, txt, pdf, xml [default: "csv"]
-u, --user=USER User
-p, --password=PASSWORD Password
-i, --tenantId=TENANTID Tenant ID [default: 1]
-c, --config=CONFIG Config File
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debugHelp:
Executes an i-doit report and saves it to a file as CSV, TXT, PDF or XMLDamit das klappt musste natürlich vorher einen Report erstellt haben, der dir die verschrotteten Objekte anzeigt. Die Report ID brauchst du dann dann hier...
Gruss,
Jörg
-
Hi,
dann habe ich den Report exportiert. Leider habe ich keine Idee wie ich dann weiter mache.
Reportergebnis bearbeiten und dann importieren oder wie soll das dann gehen?
Womit kann man .csv oder .txt bearbeiten (suchen/ersetzen)?Gruß
Thomas -
Hi Thomas,
ich würde den Report nur dazu nutzen, um festzustellen welche hosts den Status verschrottet haben. Da du diese ja dann archivieren und die Standorte löschen möchtest, würde ich das dann mit dem idoitcli Tool machen.
Ist etwas aufwändiger, aber machbar. Man muss für die Objekte in dem Report rausfinden welche IDs die Standorteinträge haben und diese dann per api call löschen. Den APi Call würde ich mit dem idoitcli von Ben Heisig machen (https://github.com/bheisig/i-doit-cli)
dann in einer schleife für jeden EIntrag aus dem Report die entsprechenden IDs der Einträge rausfinden:
idoitcli -c /etc/idoitcli/config_prod.json call '{"version": "2.0","method": "cmdb.category.read","params": {"objID": 5093027, "category": "C__CATG__LOCATION", "apikey": "xxxxx","language": "en"},"id": 1}'
Ergebnis sieht dann so aus (hier nur ein auszug):
{
"id": 2,
"jsonrpc": "2.0",
"result": [
{
"id": "5576",
"objID": "5093027",
"location_path": "920",
"parent": {
"id": "920", <<-- das ist die ID die wir brauchenDann über einen api call den Eintrag für das gewünschte Objekt löschen mit diesem Call (nur ein Beispiel) :
{
"version": "2.0",
"method": "cmdb.category.delete",
"params": {
"objID": 42,
"category": "C__CATG__IP",
"cateID": 3,
"apikey": "xxx",
"language": "en"
},
"id": 1
}Über diesen API Call kann das gerät dann archiviert werden:
{
"version": "2.0",
"method": "cmdb.object.archive",
"params": {
"object": 464,
"apikey": "xxx",
"language": "en"
},
"id": 1
}Hier ist noch ein Link zur API Doku:
https://kb.i-doit.com/display/en/Methods
Unter Kategorien und Attribute in der Verwaltung der API Schnittstelle findest du auch die Namen der Kategorien.
Hoffe das hilft Muss man halt ein bisschen was programmieren, aber dann sollte es gut funktionieren.
Gruss,
Jörg
-
Hallo Jörg,
inzwischen bin ich durch Deine Holfe schon ein ganzes Stück weiter.
Ich habe nun einen Report, der mir alle Objekte auflistet, die als
Zustand "Normal" und als CMDB-Status "verschrottet" haben.diesen rufe ich dann über die API auf:
curl \ --data ' { "version": "2.0", "method": "cmdb.reports.read", "params": { "apikey": "xxx", "id": "44", "language": "de" }, "id": 1 }' \ --header "Content-Type: application/json" \ https://idoit.domain.de/src/jsonrpc.php
Als Result bekomme ich dann
{"id":1, "jsonrpc":"2.0", "result":[{"ID":"32559", "CMDB-Status":"LC__CMDB_STATUS__SCRAPPED", "Zustand":"LC__CMDB__RECORD_STATUS__NORMAL", "Bezeichnung":"TEST1" } ] }
Manuell bekomme ich das Objekt 32559 auch über die API archiviert:
curl \ --data ' { "version": "2.0", "method": "cmdb.object.archive", "params": { "object": 32559, "apikey": "xxx", "language": "de" }, "id": 1 }' \ --header "Content-Type: application/json" \ https://idoit.domain.de/src/jsonrpc.php
Result:
{"id":1, "jsonrpc":"2.0", "result":{"success":true, "message":"Object 32559 has been archived." } }
Soweit so gut, aber nun verstehe ich noch nicht so ganz wie ich es hin bekomme, dass er die Ergebnisse aus dem Report alle abarbeitet. Irgendwie muss die ID ja in eine Variable oder so übernommen werden und dann eine Schleife oder so angelegt werden.
Gruß
Thomas -
Hallo,
hat noch jemand einen Tipp für den letzten Schritt, den ich noch anpassen muss? Bin doch glaub so kurz vor dem Ziel.
LG
Thomas -
Hi Thomas,
hab noch Tips, aber zurzeit keine Zeit das runterzuschreiben. Denke ich kann Dir was bis Mitte nächster Woche schreiben.
Gruss,Jörg
-
Hi Jörg,
das wäre klasse, wenn das klappt.
VG
Thomas -
Hi Thomas,
also wenn du das in einer Shell ausführst, würde ich die IDs aus dem Output extrahieren z.B |python -m json.tool am ende deines api calls.
Dann bekommste einen strukturierten Output. Dann kannste du die ids: rausfiltern und dann eine schleife drüber laufen lassen.
zB.
for id in api.call| |python -m json.tool |grep id |awk -F":" '{print $2}' # vor api und am Ende nach ' kommen noch backticks, die werden hier aber nicht angezeigt
do
curl
--data '
{
"version": "2.0",
"method": "cmdb.object.archive",
"params": {
"object": $id,
"apikey": "xxx",
"language": "de"
},
"id": 1
}'
--header "Content-Type: application/json"
https://idoit.domain.de/src/jsonrpc.phpdone
wichtig dabei ist, dass nur die ID in der id Variable steht und keine weiteren Zeichen mehr. Kannste ja am besten vorher mal den Filter erstellen und testen.
Sollte dann so eigentlich ganz gut funktionieren. Also das hier wäre jetzt für ne bash. Ich weiss ja nicht was deine bevorzugte Programmiersprache ist. aber mit python, perl etc geht das auch.
-
es funktioniert auch sehr gut mit dem jq tool (https://stedolan.github.io/jq/download/)
Die Ids bekommste dann so :
api.call | jq -r '.result[]?.ID'Das ist noch etwas schöner als die Lösung oben
-
@ThomasH haste mal probiert, ob Du so zurecht kommst oder gibts noch Probleme?
Gruss,
Jörg