Entsorgung von Hardware
-
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 -
Hallo @middend
vielen Dank für die Nachfrage.
Ich habe es tatsächlich noch nicht geschafft damit zum Ziel zu kommen. Ich habe inzwischen idoitcli installiert. Die Dokumentation hierzu und zur Nutzung fand ich als Linux newbe ziemlich dürftig.
Wie man hier nun die Schleifen definiert das dann die Ergebnisse verarbeitet werden ist mir nach wie vor nicht klar.Viele Grüße
Thomas