diff --git a/internal/config/settings.go b/internal/config/settings.go index b2c6657..de8811a 100644 --- a/internal/config/settings.go +++ b/internal/config/settings.go @@ -29,6 +29,11 @@ var ( Cfg Config ) +type FilterKV struct { + Filter string + Value string +} + type Config struct { Authentication AuthConfig NetBox struct { @@ -36,6 +41,7 @@ type Config struct { APIKey string DatacenterFilterKey Filter LimitPerPage int + DeviceFilters []FilterKV } Log struct { Level string diff --git a/internal/ingestor/dcim/network_inventory.go b/internal/ingestor/dcim/network_inventory.go index 4966162..53cb14e 100644 --- a/internal/ingestor/dcim/network_inventory.go +++ b/internal/ingestor/dcim/network_inventory.go @@ -12,14 +12,14 @@ import ( ) // GetNetworkInventory returns network device inventory from NetBox DCIM. -// TODO: at the moment, to list the device we use the filter "role__n=server". -// > This filter should be configurable by the user. func GetNetworkInventory() ([]*dcim.NetworkDevice, error) { response := netbox.NetboxResponse[dcim.NetworkDevice]{} params := url.Values{} params.Set(string(config.Cfg.NetBox.DatacenterFilterKey), config.Cfg.Datacenter) - params.Set("role__n", "server") + for _, filter := range config.Cfg.NetBox.DeviceFilters { + params.Add(filter.Filter, filter.Value) + } if err := netbox.Get("/api/dcim/devices/", &response, params); err != nil { return nil, fmt.Errorf("network inventory fetching failure: %w", err)