diff --git a/applications/inventory-manager-netbox/Main.go b/applications/inventory-manager-netbox/Main.go index 833376fdacba0a4a314adfa0e90e28c10854a470..452010a2815a519f0d80a6318b556bcc3c60b7cc 100644 --- a/applications/inventory-manager-netbox/Main.go +++ b/applications/inventory-manager-netbox/Main.go @@ -26,6 +26,7 @@ func main() { log.Println("Es ist alles cool!") } + log.Println("länge von element.men: ", len(elements.Mne)) //if elements != nil { if len(elements.Mne) != elementeFigure { //log.Printf("Es wurden %d Elemente gefunden", len(elementss.Mne)) diff --git a/applications/inventory-manager-netbox/netboxManager/netboxDinge.go b/applications/inventory-manager-netbox/netboxManager/netboxDinge.go index f81ec9e2fe646a5d792a9ba9fa2898053f1b816f..8290e61414f93f3e21106a92df557c6d798a0519 100644 --- a/applications/inventory-manager-netbox/netboxManager/netboxDinge.go +++ b/applications/inventory-manager-netbox/netboxManager/netboxDinge.go @@ -81,6 +81,7 @@ func createdeviceType(manufacturerID string) map[string]interface{} { } return device } + func createdeviceTypeWithParameter(manufacturerID, model, slug, uHeight string) map[string]interface{} { // /dcim/device-types/ Gerätetyp device := map[string]interface{}{ diff --git a/applications/inventory-manager-netbox/netboxManager/netboxManager.go b/applications/inventory-manager-netbox/netboxManager/netboxManager.go index cab2dafffadef3fca6c5c4ac6f468992dd0fc870..c60d608b5666582f40d1074534614c5e8a421e26 100644 --- a/applications/inventory-manager-netbox/netboxManager/netboxManager.go +++ b/applications/inventory-manager-netbox/netboxManager/netboxManager.go @@ -93,8 +93,8 @@ func Netboxmanager() error { deviceTypeID := id 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 + //deviceTypeID = 16 + //log.Printf("Hacki lösung DeviceRoleID manuell ändern: %d\n", deviceTypeID) //TODO //device-roles Geräterolle device = createDeviceRoleWithParameter("name2", "slug5", "description", "ff0000", "offline") @@ -135,14 +135,14 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac // JSON kodieren body, err := json.Marshal(device) if err != nil { - log.Printf("JSON-Fehler: %v", err) + log.Fatalf("JSON-Fehler: %v", err) return 0, err } // HTTP-Request vorbereiten req, err := http.NewRequest("POST", url, bytes.NewReader(body)) if err != nil { - log.Printf("Request-Fehler: %v", err) + log.Fatalf("Request-Fehler: %v", err) return 0, err } @@ -152,7 +152,7 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac // Request senden resp, err := http.DefaultClient.Do(req) if err != nil { - log.Printf("Sende-Fehler: %v", err) + log.Fatalf("Sende-Fehler: %v", err) return 0, err } defer resp.Body.Close() @@ -178,7 +178,9 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac // Wenn ID fehlt: Fallback → über Gerätename suchen 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 log.Println("url zum namen suchen lautet: ", queryURL) @@ -213,6 +215,45 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac } 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") @@ -222,11 +263,6 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *string) error { 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() log.Printf("Config-Pfad: %s", *configPathNetbox) @@ -244,11 +280,11 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin log.Printf("Fehler beim Parsen der YAML-Datei: %v", err) return err } - //log.Printf("Netbox Config Adresse: %v", netboxconfig.NetboxAddress) - //log.Printf("Netbox Config Token: %v", netboxconfig.ApiToken) + log.Printf("Netbox Config Adresse: %v", netboxconfig.NetboxAddress) + log.Printf("Netbox Config Token: %v", netboxconfig.ApiToken) //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) if err != nil { log.Printf("Fehler beim erstellen eines Herstellers: %v", err) @@ -258,7 +294,7 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin log.Printf("Hersteller erfolgreich erstellt oder gefunden mit der manufacturerID: %d\n", manufacturerID) //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) if err != nil { log.Printf("Fehler beim erstellen des Gerätetyps: %v", err) @@ -267,11 +303,8 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin deviceTypeID := id 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 = 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) if err != nil { log.Printf("Fehler beim erstellen der Geräterolle: %v", err) @@ -280,7 +313,7 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin deviceRoleID := id 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) if err != nil { log.Printf("Fehler beim erstellen der Geräterolle: %v", err) @@ -301,7 +334,7 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin if elements != nil { 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") id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/devices/", device) if err != nil {