Skip to content
Snippets Groups Projects
Commit de6b92c8 authored by Fabian Herbert's avatar Fabian Herbert
Browse files

works without deleting or anything like that

parent b606d786
Branches
Tags
1 merge request!1258Inventory Manager with Netbox
Pipeline #274068 failed
...@@ -26,6 +26,7 @@ func main() { ...@@ -26,6 +26,7 @@ func main() {
log.Println("Es ist alles cool!") log.Println("Es ist alles cool!")
} }
log.Println("länge von element.men: ", len(elements.Mne))
//if elements != nil { //if elements != nil {
if len(elements.Mne) != elementeFigure { if len(elements.Mne) != elementeFigure {
//log.Printf("Es wurden %d Elemente gefunden", len(elementss.Mne)) //log.Printf("Es wurden %d Elemente gefunden", len(elementss.Mne))
......
...@@ -81,6 +81,7 @@ func createdeviceType(manufacturerID string) map[string]interface{} { ...@@ -81,6 +81,7 @@ func createdeviceType(manufacturerID string) map[string]interface{} {
} }
return device return device
} }
func createdeviceTypeWithParameter(manufacturerID, model, slug, uHeight string) map[string]interface{} { func createdeviceTypeWithParameter(manufacturerID, model, slug, uHeight string) map[string]interface{} {
// /dcim/device-types/ Gerätetyp // /dcim/device-types/ Gerätetyp
device := map[string]interface{}{ device := map[string]interface{}{
......
...@@ -93,8 +93,8 @@ func Netboxmanager() error { ...@@ -93,8 +93,8 @@ func Netboxmanager() error {
deviceTypeID := id deviceTypeID := id
log.Printf("Gerätetyp erfolgreich erstellt oder gefunden mit der deviceTypeID: %d\n", deviceTypeID) log.Printf("Gerätetyp erfolgreich erstellt oder gefunden mit der deviceTypeID: %d\n", deviceTypeID)
deviceTypeID = 16 //deviceTypeID = 16
log.Printf("Hacki lösung DeviceRoleID manuell ändern: %d\n", deviceTypeID) //TODO //log.Printf("Hacki lösung DeviceRoleID manuell ändern: %d\n", deviceTypeID) //TODO
//device-roles Geräterolle //device-roles Geräterolle
device = createDeviceRoleWithParameter("name2", "slug5", "description", "ff0000", "offline") device = createDeviceRoleWithParameter("name2", "slug5", "description", "ff0000", "offline")
...@@ -135,14 +135,14 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac ...@@ -135,14 +135,14 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac
// JSON kodieren // JSON kodieren
body, err := json.Marshal(device) body, err := json.Marshal(device)
if err != nil { if err != nil {
log.Printf("JSON-Fehler: %v", err) log.Fatalf("JSON-Fehler: %v", err)
return 0, err return 0, err
} }
// HTTP-Request vorbereiten // HTTP-Request vorbereiten
req, err := http.NewRequest("POST", url, bytes.NewReader(body)) req, err := http.NewRequest("POST", url, bytes.NewReader(body))
if err != nil { if err != nil {
log.Printf("Request-Fehler: %v", err) log.Fatalf("Request-Fehler: %v", err)
return 0, err return 0, err
} }
...@@ -152,7 +152,7 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac ...@@ -152,7 +152,7 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac
// Request senden // Request senden
resp, err := http.DefaultClient.Do(req) resp, err := http.DefaultClient.Do(req)
if err != nil { if err != nil {
log.Printf("Sende-Fehler: %v", err) log.Fatalf("Sende-Fehler: %v", err)
return 0, err return 0, err
} }
defer resp.Body.Close() defer resp.Body.Close()
...@@ -178,7 +178,9 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac ...@@ -178,7 +178,9 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac
// Wenn ID fehlt: Fallback → über Gerätename suchen // Wenn ID fehlt: Fallback → über Gerätename suchen
if name, ok := device["name"].(string); ok { if name, ok := device["name"].(string); ok {
log.Println("Keine ID erhalten – versuche bestehendes Gerät mit Namen zu finden:", name)
//log.Println("Kein Gerät mit dem Namen gefunden:", name)
//log.Println("Keine ID erhalten – versuche bestehendes Gerät mit Namen zu finden:", name)
queryURL := "http://" + netboxURL + "/api" + api + "?name=" + name queryURL := "http://" + netboxURL + "/api" + api + "?name=" + name
log.Println("url zum namen suchen lautet: ", queryURL) log.Println("url zum namen suchen lautet: ", queryURL)
...@@ -213,6 +215,45 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac ...@@ -213,6 +215,45 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac
} }
log.Printf("Kein Gerät mit dem Namen gefunden.") log.Printf("Kein Gerät mit dem Namen gefunden.")
} else {
if model, ok := device["model"].(string); ok {
//log.Println("Kein Gerät mit dem Model gefunden:", model)
//log.Println("Keine ID erhalten – versuche bestehendes Gerät mit Model zu finden:", model)
queryURL := "http://" + netboxURL + "/api" + api + "?model=" + model
log.Println("url zum model suchen lautet: ", queryURL)
reqGet, err := http.NewRequest("GET", queryURL, nil)
if err != nil {
log.Printf("GET-Request-Fehler: %v", err)
return 0, err
}
reqGet.Header.Set("Authorization", "Token "+apiToken)
respGet, err := http.DefaultClient.Do(reqGet)
if err != nil {
log.Printf("GET-Fehler: %v", err)
return 0, err
}
defer respGet.Body.Close()
var getResult map[string]interface{}
if err := json.NewDecoder(respGet.Body).Decode(&getResult); err != nil {
log.Printf("GET-Antwort-Parsing: %v", err)
return 0, err
}
if results, ok := getResult["results"].([]interface{}); ok && len(results) > 0 {
if first, ok := results[0].(map[string]interface{}); ok {
if id, ok := first["id"].(float64); ok {
log.Printf("Bestehendes Gerät gefunden mit ID: %d", int64(id))
return int64(id), nil
}
}
}
log.Printf("Kein Gerät mit dem Model gefunden.")
}
} }
log.Printf("keine ID in Antwort gefunden und kein Gerät per Namen auffindbar") log.Printf("keine ID in Antwort gefunden und kein Gerät per Namen auffindbar")
...@@ -222,11 +263,6 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac ...@@ -222,11 +263,6 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac
func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *string) error { func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *string) error {
var device map[string]interface{} var device map[string]interface{}
if elements != nil {
log.Printf("Es wurden %d Elemente gefunden", len(elements.Mne))
}
//gehMirNichtAufdenSack()
//configPathNetbox := flag.String("configNetbox", "config/configNetbox.yaml", "Pfad zur NetBox-Konfigurationsdatei")
flag.Parse() flag.Parse()
log.Printf("Config-Pfad: %s", *configPathNetbox) log.Printf("Config-Pfad: %s", *configPathNetbox)
...@@ -244,11 +280,11 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin ...@@ -244,11 +280,11 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin
log.Printf("Fehler beim Parsen der YAML-Datei: %v", err) log.Printf("Fehler beim Parsen der YAML-Datei: %v", err)
return err return err
} }
//log.Printf("Netbox Config Adresse: %v", netboxconfig.NetboxAddress) log.Printf("Netbox Config Adresse: %v", netboxconfig.NetboxAddress)
//log.Printf("Netbox Config Token: %v", netboxconfig.ApiToken) log.Printf("Netbox Config Token: %v", netboxconfig.ApiToken)
//Manufacturers Hersteller //Manufacturers Hersteller
device = createManufacturerWithParameter("UniController", "UniController", "Die Wichtige große Box. nicht ausschalten") device = createManufacturerWithParameter("Uni Controller", "Uni-Controller", "Die Wichtige große Box. nicht ausschalten")
id, err := Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/manufacturers/", device) id, err := Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/manufacturers/", device)
if err != nil { if err != nil {
log.Printf("Fehler beim erstellen eines Herstellers: %v", err) log.Printf("Fehler beim erstellen eines Herstellers: %v", err)
...@@ -258,7 +294,7 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin ...@@ -258,7 +294,7 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin
log.Printf("Hersteller erfolgreich erstellt oder gefunden mit der manufacturerID: %d\n", manufacturerID) log.Printf("Hersteller erfolgreich erstellt oder gefunden mit der manufacturerID: %d\n", manufacturerID)
//Device Types Gerätetyp device_type //Device Types Gerätetyp device_type
device = createdeviceTypeWithParameter(strconv.FormatInt(manufacturerID, 10), "MainController", "MainController", "1") device = createdeviceTypeWithParameter(strconv.FormatInt(manufacturerID, 10), "Main Controller", "Main-Controller", "1")
id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/device-types/", device) id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/device-types/", device)
if err != nil { if err != nil {
log.Printf("Fehler beim erstellen des Gerätetyps: %v", err) log.Printf("Fehler beim erstellen des Gerätetyps: %v", err)
...@@ -267,11 +303,8 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin ...@@ -267,11 +303,8 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin
deviceTypeID := id deviceTypeID := id
log.Printf("Gerätetyp erfolgreich erstellt oder gefunden mit der deviceTypeID: %d\n", deviceTypeID) log.Printf("Gerätetyp erfolgreich erstellt oder gefunden mit der deviceTypeID: %d\n", deviceTypeID)
//deviceTypeID = 16
//log.Printf("Hacki lösung DeviceRoleID manuell ändern: %d\n", deviceTypeID) //TODO
//device-roles Geräterolle //device-roles Geräterolle
device = createDeviceRoleWithParameter("HauptController", "HauptController", "Ganz wichtig Kiste", "ff0000", "offline") device = createDeviceRoleWithParameter("Haupt Controller", "Haupt-Controller", "Ganz wichtig Kiste", "ff0000", "offline")
id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/device-roles/", device) id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/device-roles/", device)
if err != nil { if err != nil {
log.Printf("Fehler beim erstellen der Geräterolle: %v", err) log.Printf("Fehler beim erstellen der Geräterolle: %v", err)
...@@ -280,7 +313,7 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin ...@@ -280,7 +313,7 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin
deviceRoleID := id deviceRoleID := id
log.Printf("Geräterolle erfolgreich erstellt oder gefunden mit der deviceRoleID: %d\n", deviceRoleID) log.Printf("Geräterolle erfolgreich erstellt oder gefunden mit der deviceRoleID: %d\n", deviceRoleID)
device = createSiteWithParameter("Darmstadt", "darmstadt", "description", "physicalAddress", "shippingAddress", "comments", "active") device = createSiteWithParameter("Darmstadt V1", "darmstadt-v1", "description", "physicalAddress", "shippingAddress", "comments", "active")
id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/sites/", device) id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/sites/", device)
if err != nil { if err != nil {
log.Printf("Fehler beim erstellen der Geräterolle: %v", err) log.Printf("Fehler beim erstellen der Geräterolle: %v", err)
...@@ -301,7 +334,7 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin ...@@ -301,7 +334,7 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin
if elements != nil { if elements != nil {
for _, element := range elements.Mne { for _, element := range elements.Mne {
deviceTypeID = 3 //deviceTypeID = 3
device = createDeviceWithParameter(element.Name, strconv.FormatInt(deviceTypeID, 10), strconv.FormatInt(deviceRoleID, 10), strconv.FormatInt(siteID, 10), element.Id, element.Plugin.String(), "active") device = createDeviceWithParameter(element.Name, strconv.FormatInt(deviceTypeID, 10), strconv.FormatInt(deviceRoleID, 10), strconv.FormatInt(siteID, 10), element.Id, element.Plugin.String(), "active")
id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/devices/", device) id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/devices/", device)
if err != nil { if err != nil {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment