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
No related tags found
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