Entsorgung von Hardware
-
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