diff --git a/applications/inventory-manager-netbox/Main.go b/applications/inventory-manager-netbox/Main.go index 452010a2815a519f0d80a6318b556bcc3c60b7cc..d5742ef9ae8a280e1abb74943fb14a918f7e3b70 100644 --- a/applications/inventory-manager-netbox/Main.go +++ b/applications/inventory-manager-netbox/Main.go @@ -9,41 +9,58 @@ import ( "code.fbi.h-da.de/danet/gosdn/applications/inventory-manager-netbox/netboxManager" ) -var configPathGosdn = flag.String("configGosdn", "config/config.yaml", "Pfad zur NetBox-Konfigurationsdatei") -var configPathNetbox = flag.String("configNetbox", "config/configNetbox.yaml", "Pfad zur NetBox-Konfigurationsdatei") +const ( + Red = "\033[31m" + Green = "\033[32m" + Yellow = "\033[33m" + Blue = "\033[34m" + Reset = "\033[0m" +) func main() { + var configPathGosdn = flag.String("configGosdn", "config/config.yaml", "Path to the Gosdn configuration file") + var configPathNetbox = flag.String("configNetbox", "config/configNetbox.yaml", "Path to the NetBox configuration file") var elementeFigure int flag.Parse() for { + start := time.Now() // Startzeit merken //getting date from the controller. elements, err := inventoryManager.CreateGosdnConnectionwitNetzworkElementslist(configPathGosdn) if err != nil { - log.Fatalf("Fehler beim Erstellen der Controller Conenction: %v", err) + log.Fatalf("Error creating the controller connection: %v", err) } else { - log.Println("Es ist alles cool!") + //log.Println("everything is great!") } - log.Println("länge von element.men: ", len(elements.Mne)) + duration := time.Since(start) // Dauer berechnen + //log.Printf("Gosdn Dauer: %s\n", duration) + log.Println(string(Yellow), duration, Reset) + start = time.Now() // Startzeit merken + + log.Println("length of element.men: ", len(elements.Mne)) //if elements != nil { if len(elements.Mne) != elementeFigure { //log.Printf("Es wurden %d Elemente gefunden", len(elementss.Mne)) //take the date into Netbox err = netboxManager.FeedNetbox(elements, configPathNetbox) if err != nil { - log.Fatalf("Fehler beim Erstellen des Geräts: %v", err) + log.Fatalf("Error creating device: %v", err) } else { - log.Println("Es ist alles cool!") + log.Println("everything is great!") elementeFigure = len(elements.Mne) - log.Printf("Es sind %d elementeFigur", elementeFigure) + log.Printf("there are %d elementeFigur", elementeFigure) } } else { - log.Printf("Der Controller hat keine Daten für mich. Weiter machen Sinnlos^^ elements ist leer") + log.Printf("The controller has no new data for me. Continuing is pointless^^ elements is empty") time.Sleep(1 * time.Second) } + duration = time.Since(start) // Dauer berechnen + //log.Printf("Netbox Dauer: %s\n", duration) + log.Println(string(Yellow), duration, Reset) + } /* diff --git a/applications/inventory-manager-netbox/inventoryManager/inventoryManager.go b/applications/inventory-manager-netbox/inventoryManager/inventoryManager.go index 654355e0b5805eb730d8626a18612f9f821b5534..82ca8a3b8a0c47b3b4360ea09cdae44ab29b57ae 100644 --- a/applications/inventory-manager-netbox/inventoryManager/inventoryManager.go +++ b/applications/inventory-manager-netbox/inventoryManager/inventoryManager.go @@ -2,18 +2,13 @@ package inventoryManager import ( "context" - //"flag" "log" "os" "time" - // "code.fbi.h-da.de/danet/gosdn/controller/api" - "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" "code.fbi.h-da.de/danet/gosdn/applications/inventory-manager-netbox/config" "code.fbi.h-da.de/danet/gosdn/controller/api" - - //inventorymanager "code.fbi.h-da.de/danet/gosdn/applications/inventory-manager-netbox/inventoryManager" "github.com/sirupsen/logrus" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" @@ -31,22 +26,21 @@ type InventoryManager struct { // createGosdnConnectionwitNetzworkElementslist creates a context with the given authorization token. And gives the list of network elements bag. func CreateGosdnConnectionwitNetzworkElementslist(configFile *string) (*networkelement.GetAllResponse, error) { // Configpfad aus CLI-Flag holen - //configFile := flag.String("configGosdn", "config/config.yaml", "Pfad zur NetBox-Konfigurationsdatei") + //configPathNetbox = flag.String("configNetbox", "config/configNetbox.yaml", "Path to the NetBox configuration file") //flag.Parse() - - log.Printf("Config-Pfad: %s", *configFile) + //log.Printf("Config path: %s", *configFile) //Reading the config file data, err := os.ReadFile(*configFile) if err != nil { - log.Printf("Fehler beim Lesen der Konfigurationsdatei: %v", err) + log.Printf("Error reading configuration file: %v", err) return nil, err } // YAML in Config-Struct einlesen gosdnConfig := &config.Config{} if err := yaml.Unmarshal(data, gosdnConfig); err != nil { - log.Printf("Fehler beim Parsen der YAML-Datei: %v", err) + log.Printf("Error parsing YAML file: %v", err) return nil, err } /* @@ -60,9 +54,9 @@ func CreateGosdnConnectionwitNetzworkElementslist(configFile *string) (*networke if err != nil { log.Fatal(err) } - //log.Print(invManager) //i dont know what this is + //log.Print(invManager) - //gibt die Liste mit geräte vom Controller aus. + //Returning the list of devices from the controller. elements := listRunningNetworkElements(invManager) return elements, nil @@ -116,7 +110,7 @@ func listRunningNetworkElements(i *InventoryManager) *networkelement.GetAllRespo elements, err := api.GetNetworkElements(i.sessionContext, i.controllerAddress, i.pndID) if err != nil { - logrus.Errorf("Fehler beim Abrufen der Netzwerkelemente: %s", err.Error()) + logrus.Errorf("Error retrieving network elements: %s", err.Error()) return nil } /* diff --git a/applications/inventory-manager-netbox/netboxManager/netboxDinge.go b/applications/inventory-manager-netbox/netboxManager/netboxDinge.go deleted file mode 100644 index 8290e61414f93f3e21106a92df557c6d798a0519..0000000000000000000000000000000000000000 --- a/applications/inventory-manager-netbox/netboxManager/netboxDinge.go +++ /dev/null @@ -1,162 +0,0 @@ -package netboxManager - -func createDevice() map[string]interface{} { - device := map[string]interface{}{ - "name": "Modulares-Gerät", - "device_type": 1, - "role": 1, - "site": 1, - "serial": "SN123456999", - "description": "Kompaktes Beispielgerät", - "status": "active", - } - return device -} -func createDeviceWithParameter(name, deviceTypeID, deviceRoleID, siteID, serial, description, status string) map[string]interface{} { - // /api/dcim/devices/ Gerät - device := map[string]interface{}{ - "name": name, - "device_type": deviceTypeID, - "role": deviceRoleID, - "site": siteID, - "serial": serial, - "description": description, - "status": status, - } - return device -} - -func createTag() map[string]interface{} { - device := map[string]interface{}{ - "name": "Guter Tag aus dem richtigen Programm18", - "slug": "guter-tag18", - "description": "Das ist ein gutes Gerät, aus dem richtigen Programm", - } - return device -} -func createTagWithParameter(name, slug, description string) map[string]interface{} { - device := map[string]interface{}{ - "name": name, - "slug": slug, - "description": description, - } - return device -} - -func createModultyp(manufacturerID string) map[string]interface{} { - ///api/dcim/module-types/ Modultypen - device := map[string]interface{}{ - "model": "Großes Model18", - "partNumber": "Ich bin eine Part Number", - //"weight" : "9", - //"weight_unit": "KiloGramm", - "description": "Ich bin eine Beschreibung von einem Großen Model", - "comments": "Und ich bin ein Kommentar", - "manufacturer": manufacturerID, - } - return device -} -func createModultypWithParameter(model, partNumber, description, comments, manufacturerID string) map[string]interface{} { - ///api/dcim/module-types/ Modultypen - device := map[string]interface{}{ - "model": model, - "partNumber": partNumber, - //"weight" : "9", - //"weight_unit": "KiloGramm", - "description": description, - "comments": comments, - "manufacturer": manufacturerID, - } - return device -} - -func createdeviceType(manufacturerID string) map[string]interface{} { - // /dcim/device-types/ Gerätetyp - device := map[string]interface{}{ - - "manufacturer": manufacturerID, - "model": "Mein-Gerätetyp", - "slug": "mein-geraetetyp", - "u_height": "1", - } - return device -} - -func createdeviceTypeWithParameter(manufacturerID, model, slug, uHeight string) map[string]interface{} { - // /dcim/device-types/ Gerätetyp - device := map[string]interface{}{ - "manufacturer": manufacturerID, - "model": model, - "slug": slug, - "u_height": uHeight, - } - return device -} - -func createManufacturer() map[string]interface{} { - // /dcim/manufacturers/ Hersteller - device := map[string]interface{}{ - "name": "Großer Hersteller18", - "slug": "grosser-hersteller18", - "description": "Hersteller für große Modelle", - } - return device -} -func createManufacturerWithParameter(name, slug, description string) map[string]interface{} { - // /dcim/manufacturers/ Hersteller - device := map[string]interface{}{ - "name": name, - "slug": slug, - "description": description, - } - return device -} - -func createDeviceRole() map[string]interface{} { - // /dcim/device-roles/ Geräterolle - device := map[string]interface{}{ - "name": "Wichtige Rolle18", - "slug": "wichtige-rolle18", - "description": "Eine wichtige Rolle für Geräte", - "color": "ff0000", // Rote Farbe als Hex-Code - } - return device -} -func createDeviceRoleWithParameter(name, slug, description, color, active string) map[string]interface{} { - // /dcim/device-roles/ Geräterolle - device := map[string]interface{}{ - "name": name, - "slug": slug, - "description": description, - "color": color, - "status": active, - } - return device -} - -func createSite() map[string]interface{} { - // /dcim/sites/ Standorts - device := map[string]interface{}{ - "name": "GoHauptstandort18", - "slug": "Gohauptstandort18", - "description": "Hauptsitz des Unternehmens", - "physicalAddress": "Musterstraße 1, 12345 Musterstadt", - "shippingAddress": "Postfach 1001, 12345 Musterstadt", - "comments": "Dies ist der Hauptstandort.", - "status": "active", - } - return device -} -func createSiteWithParameter(name, slug, description, physicalAddress, shippingAddress, comments, status string) map[string]interface{} { - // /dcim/sites/ Standorts - device := map[string]interface{}{ - "name": name, - "slug": slug, - "description": description, - "physicalAddress": physicalAddress, - "shippingAddress": shippingAddress, - "comments": comments, - "status": status, - } - return device -} diff --git a/applications/inventory-manager-netbox/netboxManager/netboxManager.go b/applications/inventory-manager-netbox/netboxManager/netboxManager.go index c60d608b5666582f40d1074534614c5e8a421e26..67d22bcd85798e0d2b6772e7566e8dffaa61eb5c 100644 --- a/applications/inventory-manager-netbox/netboxManager/netboxManager.go +++ b/applications/inventory-manager-netbox/netboxManager/netboxManager.go @@ -15,134 +15,22 @@ import ( "gopkg.in/yaml.v3" ) -func gehMirNichtAufdenSack() { - var device map[string]interface{} - device = createDevice() - log.Printf("Irgendwas: %v", device) - device = createDeviceWithParameter("name", "deviceTypeID", "deviceRoleID", "siteID", "serial", "description", "active") - log.Printf("Irgendwas: %v", device) - device = createTag() - log.Printf("Irgendwas: %v", device) - device = createTagWithParameter("name", "slug", "description") - log.Printf("Irgendwas: %v", device) - device = createModultyp("10") - log.Printf("Irgendwas: %v", device) - device = createModultypWithParameter("model", "partNumber", "description", "comments", "manufacturerID") - log.Printf("Irgendwas: %v", device) - device = createdeviceType("10") - log.Printf("Irgendwas: %v", device) - device = createdeviceTypeWithParameter("manufacturerID", "model", "slug", "1") - log.Printf("Irgendwas: %v", device) - device = createManufacturer() - log.Printf("Irgendwas: %v", device) - device = createManufacturerWithParameter("name", "slug", "description") - log.Printf("Irgendwas: %v", device) - device = createDeviceRole() - log.Printf("Irgendwas: %v", device) - device = createDeviceRoleWithParameter("name", "slug", "description", "ff0000", "offline") - log.Printf("Irgendwas: %v", device) - device = createSite() - log.Printf("Irgendwas: %v", device) - device = createSiteWithParameter("name", "slug", "description", "physicalAddress", "shippingAddress", "comments", "status") - log.Printf("%v", device) - -} - -// create one Device in Netbox with JSON and HTTP -func Netboxmanager() error { - var device map[string]interface{} - //gehMirNichtAufdenSack() - // Configpfad aus CLI-Flag holen - configFileNetbox := flag.String("configNetbox", "config/configNetbox.yaml", "Pfad zur NetBox-Konfigurationsdatei") - flag.Parse() - log.Printf("Config-Pfad: %s", *configFileNetbox) - - // Datei lesen - data, err := os.ReadFile(*configFileNetbox) - if err != nil { - log.Printf("Fehler beim Lesen der Konfigurationsdatei: %v", err) - return err - } - - // YAML in Config-Struct einlesen - netboxconfig := &config.NetboxConfig{} - if err := yaml.Unmarshal(data, netboxconfig); err != nil { - 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) - - //Manufacturers Hersteller - device = createManufacturerWithParameter("HerstellerName2", "slug2", "description") - id, err := Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/manufacturers/", device) - if err != nil { - log.Printf("Fehler beim erstellen eines Herstellers: %v", err) - return err - } - manufacturerID := id - 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), "model5", "slug5", "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) - return err - } - 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("name2", "slug5", "description", "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) - return err - } - 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") - id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/sites/", device) - if err != nil { - log.Printf("Fehler beim erstellen der Geräterolle: %v", err) - return err - } - siteID := id - log.Printf("Geräterolle erfolgreich erstellt oder gefunden mit der siteID: %d\n", siteID) - - device = createDeviceWithParameter("name", strconv.FormatInt(deviceTypeID, 10), strconv.FormatInt(deviceRoleID, 10), strconv.FormatInt(siteID, 10), "serial", "description", "active") - id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/devices/", device) - if err != nil { - log.Printf("Fehler beim erstellen des Gerätes: %v", err) - return err - } - deviceID := id - log.Printf("Gerät erfolgreich erstellt oder gefunden mit der deviceID: %d\n", deviceID) - - return nil -} - func Netzworhandling(netboxURL, apiToken, api string, device map[string]interface{}) (int64, error) { // Ziel-URL vorbereiten url := "http://" + netboxURL + "/api" + api - log.Printf("Die URL lautet: %s", url) + //log.Printf("The URL is: %s", url) // JSON kodieren body, err := json.Marshal(device) if err != nil { - log.Fatalf("JSON-Fehler: %v", err) + log.Fatalf("JSON error: %v", err) return 0, err } // HTTP-Request vorbereiten req, err := http.NewRequest("POST", url, bytes.NewReader(body)) if err != nil { - log.Fatalf("Request-Fehler: %v", err) + log.Fatalf("Request error: %v", err) return 0, err } @@ -152,7 +40,7 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac // Request senden resp, err := http.DefaultClient.Do(req) if err != nil { - log.Fatalf("Sende-Fehler: %v", err) + log.Fatalf("Sending error: %v", err) return 0, err } defer resp.Body.Close() @@ -160,14 +48,14 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac // Überprüfe den Statuscode if resp.StatusCode < 200 || resp.StatusCode >= 300 { bodyBytes, _ := io.ReadAll(resp.Body) - log.Printf("HTTP Fehler: %d - %s", resp.StatusCode, string(bodyBytes)) + log.Printf("HTTP error: %d - %s", resp.StatusCode, string(bodyBytes)) //return 0, err } // Antwort dekodieren var result map[string]interface{} if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { - log.Printf("Antwort-Parsing: %v", err) + log.Printf("Response parsing: %v", err) //return 0, err } @@ -183,7 +71,7 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac //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) + log.Println("URL to search for name is: ", queryURL) reqGet, err := http.NewRequest("GET", queryURL, nil) if err != nil { @@ -194,14 +82,14 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac respGet, err := http.DefaultClient.Do(reqGet) if err != nil { - log.Printf("GET-Fehler: %v", err) + log.Printf("GET error: %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) + log.Printf("GET response parsing: %v", err) return 0, err } @@ -214,49 +102,48 @@ func Netzworhandling(netboxURL, apiToken, api string, device map[string]interfac } } - log.Printf("Kein Gerät mit dem Namen gefunden.") + log.Printf("No device found with the name") } 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) + log.Println("URL to search for model is: ", queryURL) reqGet, err := http.NewRequest("GET", queryURL, nil) if err != nil { - log.Printf("GET-Request-Fehler: %v", err) + log.Printf("GET request error: %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) + log.Printf("GET error: %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) + log.Printf("GET response 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)) + log.Printf("Existing device found with ID: %d", int64(id)) return int64(id), nil } } } - log.Printf("Kein Gerät mit dem Model gefunden.") + log.Printf("No device found with this model") } } - log.Printf("keine ID in Antwort gefunden und kein Gerät per Namen auffindbar") + log.Printf("No ID found in response and no device can be found by name or model") return 0, nil } @@ -265,62 +152,63 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin flag.Parse() - log.Printf("Config-Pfad: %s", *configPathNetbox) + //log.Printf("Config path: %s", *configPathNetbox) - // Config Datei lesen + // Read config file data, err := os.ReadFile(*configPathNetbox) if err != nil { - log.Printf("Fehler beim Lesen der Konfigurationsdatei: %v", err) + log.Printf("Error reading configuration file: %v", err) return err } // YAML in Config-Struct einlesen netboxconfig := &config.NetboxConfig{} if err := yaml.Unmarshal(data, netboxconfig); err != nil { - log.Printf("Fehler beim Parsen der YAML-Datei: %v", err) + log.Printf("Error parsing Netbox Config / YAML file: %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("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) + log.Printf("Error creating a manufacturer: %v", err) return err } manufacturerID := id - log.Printf("Hersteller erfolgreich erstellt oder gefunden mit der manufacturerID: %d\n", manufacturerID) + log.Printf("Manufacturer successfully created or found with the manufacturerID: %d\n", manufacturerID) //Device Types Gerätetyp device_type 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) + log.Printf("Error creating a Device Type: %v", err) return err } deviceTypeID := id - log.Printf("Gerätetyp erfolgreich erstellt oder gefunden mit der deviceTypeID: %d\n", deviceTypeID) + log.Printf("Device Types successfully created or found with the deviceTypeID: %d\n", deviceTypeID) //device-roles Geräterolle 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) + log.Printf("Error creating a Device Role: %v", err) return err } deviceRoleID := id - log.Printf("Geräterolle erfolgreich erstellt oder gefunden mit der deviceRoleID: %d\n", deviceRoleID) + log.Printf("Device Role successfully created or found with the deviceRoleID: %d\n", deviceRoleID) + //Sites Standort List 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) + log.Printf("Error creating a Site: %v", err) return err } siteID := id - log.Printf("Geräterolle erfolgreich erstellt oder gefunden mit der siteID: %d\n", siteID) + log.Printf("Site successfully created or found with the siteID: %d\n", siteID) /* for _, element := range elements.Mne { @@ -334,20 +222,131 @@ func FeedNetbox(elements *networkelement.GetAllResponse, configPathNetbox *strin if elements != nil { for _, element := range elements.Mne { - //deviceTypeID = 3 + //log.Printf("Test Zeugs, ich will die IP: %v", element.GetMneNotification()) + + log.Printf("IP Adresse, check: %v", element.TransportAddress) + + //log.Printf("Testen String bekommen: %v", element.String()) + 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) + deviceID := id if err != nil { - log.Printf("Fehler beim erstellen des Gerätes: %v", err) + log.Printf("Error creating a Device: %v", err) return err } else { - - log.Printf("Gerät erfolgreich erstellt oder gefunden mit der deviceID: %d\n", id) + log.Printf("Device successfully created or found with the deviceID: %d\n", deviceID) } + Newinterface := createInterfaceWithParameter("Name-eth0", strconv.FormatInt(deviceID, 10), "1000base-t", "Main uplink", true) + id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/ipam/ip-addresses/", Newinterface) + NewinterfaceID := id + if err != nil { + log.Printf("Error creating a Interface: %v", err) + return err + } else { + log.Printf("Interface successfully created or found with the interfaceID: %d\n", NewinterfaceID) + //IP hinzufügen + //NewIpAddress := createIPAddressWithParameter("192.168.1.10/24", strconv.FormatInt(NewinterfaceID, 10)) + NewIpAddress := createIPAddressWithParameter(element.TransportAddress+"/32", strconv.FormatInt(NewinterfaceID, 10)) + + id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/devices/", NewIpAddress) + ipAddressID := id + if err != nil { + log.Printf("Error creating a IP Address: %v", err) + return err + } else { + if ipAddressID == 0 { + log.Printf("No IP Address created in Netbox. IP Address: %s\n", element.TransportAddress) + } else { + log.Printf("IP Address successfully created or found with the ipAddressID: %d\n", ipAddressID) + } + } + } } } else { - log.Fatalf("Der Controller hat keine Daten für mich. Weiter machen Sinnlos^^ elementss ist leer") + //log.Fatalf("The controller has no data for me. Continuing is pointless. ^^ elementss is empty.") + } + return nil +} + +/* +// create one Device in Netbox with JSON and HTTP +func Netboxmanager() error { + var device map[string]interface{} + //gehMirNichtAufdenSack() + // Configpfad aus CLI-Flag holen + configFileNetbox := flag.String("configNetbox", "config/configNetbox.yaml", "Pfad zur NetBox-Konfigurationsdatei") + flag.Parse() + log.Printf("Config-Pfad: %s", *configFileNetbox) + + // Datei lesen + data, err := os.ReadFile(*configFileNetbox) + if err != nil { + log.Printf("Fehler beim Lesen der Konfigurationsdatei: %v", err) + return err + } + + // YAML in Config-Struct einlesen + netboxconfig := &config.NetboxConfig{} + if err := yaml.Unmarshal(data, netboxconfig); err != nil { + 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) + + //Manufacturers Hersteller + device = createManufacturerWithParameter("HerstellerName2", "slug2", "description") + id, err := Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/manufacturers/", device) + if err != nil { + log.Printf("Fehler beim erstellen eines Herstellers: %v", err) + return err + } + manufacturerID := id + 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), "model5", "slug5", "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) + return err + } + 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("name2", "slug5", "description", "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) + return err + } + 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") + id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/sites/", device) + if err != nil { + log.Printf("Fehler beim erstellen der Geräterolle: %v", err) + return err } + siteID := id + log.Printf("Geräterolle erfolgreich erstellt oder gefunden mit der siteID: %d\n", siteID) + + device = createDeviceWithParameter("name", strconv.FormatInt(deviceTypeID, 10), strconv.FormatInt(deviceRoleID, 10), strconv.FormatInt(siteID, 10), "serial", "description", "active") + id, err = Netzworhandling(netboxconfig.NetboxAddress, netboxconfig.ApiToken, "/dcim/devices/", device) + if err != nil { + log.Printf("Fehler beim erstellen des Gerätes: %v", err) + return err + } + deviceID := id + log.Printf("Gerät erfolgreich erstellt oder gefunden mit der deviceID: %d\n", deviceID) + return nil } +*/ diff --git a/applications/inventory-manager-netbox/netboxManager/netboxUtility.go b/applications/inventory-manager-netbox/netboxManager/netboxUtility.go new file mode 100644 index 0000000000000000000000000000000000000000..01361246241354ee3980016a09b9b3b72219fdc3 --- /dev/null +++ b/applications/inventory-manager-netbox/netboxManager/netboxUtility.go @@ -0,0 +1,112 @@ +package netboxManager + +func createDeviceWithParameter(name, deviceTypeID, deviceRoleID, siteID, serial, description, status string) map[string]interface{} { + // /api/dcim/devices/ Gerät + device := map[string]interface{}{ + "name": name, + "device_type": deviceTypeID, + "role": deviceRoleID, + "site": siteID, + "serial": serial, + "description": description, + "status": status, + } + return device +} + +func createdeviceTypeWithParameter(manufacturerID, model, slug, uHeight string) map[string]interface{} { + // /dcim/device-types/ Gerätetyp + device := map[string]interface{}{ + "manufacturer": manufacturerID, + "model": model, + "slug": slug, + "u_height": uHeight, + } + return device +} + +func createManufacturerWithParameter(name, slug, description string) map[string]interface{} { + // /dcim/manufacturers/ Hersteller + device := map[string]interface{}{ + "name": name, + "slug": slug, + "description": description, + } + return device +} + +func createDeviceRoleWithParameter(name, slug, description, color, active string) map[string]interface{} { + // /dcim/device-roles/ Geräterolle + device := map[string]interface{}{ + "name": name, + "slug": slug, + "description": description, + "color": color, + "status": active, + } + return device +} + +func createSiteWithParameter(name, slug, description, physicalAddress, shippingAddress, comments, status string) map[string]interface{} { + // /dcim/sites/ Standorts + device := map[string]interface{}{ + "name": name, + "slug": slug, + "description": description, + "physicalAddress": physicalAddress, + "shippingAddress": shippingAddress, + "comments": comments, + "status": status, + } + return device +} + +// createLocationWithParameter creates a Interface +func createInterfaceWithParameter(name, deviceID, interfaceType, + description string, enabled bool) map[string]interface{} { + // /api/dcim/interfaces/ Schnittstelle List + device := map[string]interface{}{ + "device": deviceID, + "name": name, + "type": interfaceType, // z. B. "1000base-t" + "description": description, + "enabled": enabled, + } + return device +} + +// createIPAddressWithParameter erstellt eine IP-Adresse und weist sie einem Interface zu +func createIPAddressWithParameter(address, interfaceID string) map[string]interface{} { + // /api/ipam/ip-addresses/ + device := map[string]interface{}{ + "address": address, // z. B. "192.168.0.1/24" + "assigned_object_type": "dcim.interface", + "assigned_object_id": interfaceID, + } + return device +} + +/* + func createTagWithParameter(name, slug, description string) map[string]interface{} { + device := map[string]interface{}{ + "name": name, + "slug": slug, + "description": description, + } + return device + } + + func createModultypWithParameter(model, partNumber, description, comments, manufacturerID string) map[string]interface{} { + ///api/dcim/module-types/ Modultypen + device := map[string]interface{}{ + "model": model, + "partNumber": partNumber, + //"weight" : "9", + //"weight_unit": "KiloGramm", + "description": description, + "comments": comments, + "manufacturer": manufacturerID, + } + return device +} +*/