What installation are you running?
Production (netalertx) 📦
Is there an existing issue for this?
The issue occurs in the following browsers. Select at least 2.
Current Behavior
When navigating to Maintenance/Tools and clicking "Delete all devices", it just pops up a message in the browser:
Error: Validation Error: Input should be a valid list
No devices are deleted.
Expected Behavior
I expect all devices to be deleted.
Steps To Reproduce
I have tried to find a way to clear all devices, but with no success. So for me this always happens, 100% of the time. I did try disabling a few plugins (specifically OMDSDNOPENAPI), but that didn't change anything either.
This is basically a test-installation to see if it does what I need. It's relatively bare bones and not a lot of settings have been adjusted. Not quite "stock", but very close.
Relevant app.conf settings
LOADED_PLUGINS=['ARPSCAN','CSVBCKP','DBCLNP','DIGSCAN','MAINT','NEWDEV','NBTSCAN','NSLOOKUP','NTFPRCS','SETPWD','SMTP','SYNC','VNDRPDT','WORKFLOWS','UI','CUSTPROP','OMDSDNOPENAPI','INTRNT','ICMP','SNMPDSC']
(If any more parts/sections would be helpful, just let me know)
docker-compose.yml
services:
netalertx:
#use an environmental variable to set host networking mode if needed
container_name: netalertx # The name when you docker contiainer ls
image: ghcr.io/jokob-sk/netalertx:latest
network_mode: ${NETALERTX_NETWORK_MODE:-host} # Use host networking for ARP scanning and other services
read_only: true # Make the container filesystem read-only
cap_drop:
# Drop all capabilities for enhanced security
- ALL
cap_add:
# Add only the necessary capabilities
- NET_ADMIN # Required for ARP scanning
- NET_RAW # Required for raw socket operations
- NET_BIND_SERVICE # Required to bind to privileged ports (nbtscan)
- CHOWN # Required for root-entrypoint to chown /data + /tmp before dropping privileges
- SETUID # Required for root-entrypoint to switch to non-root user
- SETGID # Required for root-entrypoint to switch to non-root group
volumes:
- type: volume
source: netalertx_data
target: /data
read_only: false
# Example custom local folder called /home/user/netalertx_data
# - type: bind
# source: /home/user/netalertx_data
# target: /data
# read_only: false
# ... or use the alternative format
# - /home/user/netalertx_data:/data:rw
- type: bind
source: /etc/localtime
target: /etc/localtime
read_only: true
# Mount your DHCP server file into NetAlertX for a plugin to access
# - path/on/host/to/dhcp.file:/resources/dhcp.file
# tmpfs mount consolidates writable state for a read-only container and improves performance
# uid/gid default to the service user (NETALERTX_UID/GID, default 20211)
# mode=1700 grants rwx------ permissions to the runtime user only
tmpfs:
# Comment out to retain logs between container restarts - this has a server performance impact.
- /tmp:uid=${NETALERTX_UID:-20211},gid=${NETALERTX_GID:-20211},mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime
# Retain logs - comment out tmpfs /tmp if you want to retain logs between container restarts
# Please note if you remove the /tmp mount, you must create and maintain sub-folder mounts.
# - /path/on/host/log:/tmp/log
# - "/tmp/api:uid=${NETALERTX_UID:-20211},gid=${NETALERTX_GID:-20211},mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"
# - "/tmp/nginx:uid=${NETALERTX_UID:-20211},gid=${NETALERTX_GID:-20211},mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"
# - "/tmp/run:uid=${NETALERTX_UID:-20211},gid=${NETALERTX_GID:-20211},mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"
environment:
LISTEN_ADDR: ${LISTEN_ADDR:-0.0.0.0} # Listen for connections on all interfaces
PORT: ${PORT:-20211} # Application port
GRAPHQL_PORT: ${GRAPHQL_PORT:-20212} # GraphQL API port (passed into APP_CONF_OVERRIDE at runtime)
# NETALERTX_DEBUG: ${NETALERTX_DEBUG:-0} # 0=kill all services and restart if any dies. 1 keeps running dead services.
# PUID: 20211 # Runtime PUID override, set to 0 to run as root
# PGID: 20211 # Runtime PGID override
# Resource limits to prevent resource exhaustion
mem_limit: 2048m # Maximum memory usage
mem_reservation: 1024m # Soft memory limit
cpu_shares: 512 # Relative CPU weight for CPU contention scenarios
pids_limit: 512 # Limit the number of processes/threads to prevent fork bombs
logging:
driver: json-file # Use JSON file logging driver
options:
max-size: 10m # Rotate log files after they reach 10MB
max-file: "3" # Keep a maximum of 3 log files
# Always restart the container unless explicitly stopped
restart: unless-stopped
volumes:
# Persistent volume for configuration and database storage
netalertx_data: null
Debug or Trace enabled
Relevant app.log section
13:36:30 [API] Update API starting
13:36:30 [API] periodic_write is already running.
13:36:30 [SSE] Broadcasted event: state_update
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_appevents.json|2653925397721363331|2653925397721363331)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_devices.json|-7714812334277170245|-7714812334277170245)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_events_pending_alert.json|-4748823668498910014|-4748823668498910014)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_settings.json|-5434946670036614569|-5434946670036614569)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_plugins_events.json|-4748823668498910014|-4748823668498910014)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_plugins_history.json|-6392182191413410779|-6392182191413410779)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_plugins_objects.json|-8250939578330521192|-8250939578330521192)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_plugins_language_strings.json|-9117770155166865930|-9117770155166865930)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_notifications.json|-313760943203148307|-313760943203148307)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_online_history.json|-7663158852817754842|-7663158852817754842)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_devices_tiles.json|7357630314619815947|7357630314619815947)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_devices_filters.json|-293370180942433435|-293370180942433435)
13:36:30 [API] api_endpoint_class: Hashes (file|old|new): (table_custom_endpoint.json|-244111573474368263|-244111573474368263)
13:36:30 [SSE] Broadcasted event: state_update
13:36:30 [WF] get_new_app_events - new events count: 0
13:36:30 [MAIN] Processing WORKFLOW new_events from get_new_app_events: 0
13:36:30 [Plugins] Should I update API (userUpdatedDevices): False
13:36:32 [HTTP] DELETE /devices from 127.0.0.1
13:36:32 [HTTP] Headers: {'Host': 'RealServerFQDN', 'X-Real-Ip': 'RealServerIP', 'X-Forwarded-For': 'RealServerIP', 'X-Forwarded-Proto': 'http', 'Content-Length': '13', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0', 'Accept': '*/*', 'Accept-Language': 'en-US,en;q=0.9,de-DE;q=0.8,de;q=0.7', 'Accept-Encoding': 'gzip, deflate', 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'http://RealServerFQDN:20211', 'Dnt': '1', 'Sec-Gpc': '1', 'Referer': 'http://RealServerFQDN:20211//maintenance.php'}
13:36:32 [Validation] Error for delete_devices: 1 validation error for DeleteDevicesRequest
macs
Input should be a valid list [type=list_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.12/v/list_type
127.0.0.1 - - [06/Feb/2026 13:36:32] "�[31m�[1mDELETE /devices HTTP/1.1�[0m" 422 -
13:36:32 [HTTP] GET /messaging/in-app/unread from 127.0.0.1
13:36:32 [HTTP] Headers: {'Host': 'RealServerFQDN', 'X-Real-Ip': 'RealServerIP', 'X-Forwarded-For': 'RealServerIP', 'X-Forwarded-Proto': 'http', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0', 'Accept': '*/*', 'Accept-Language': 'en-US,en;q=0.9,de-DE;q=0.8,de;q=0.7', 'Accept-Encoding': 'gzip, deflate', 'X-Requested-With': 'XMLHttpRequest', 'Dnt': '1', 'Sec-Gpc': '1', 'Referer': 'http://RealServerFQDN:20211//devices.php'}
127.0.0.1 - - [06/Feb/2026 13:36:32] "GET /messaging/in-app/unread HTTP/1.1" 200 -
13:36:35 [Import Config] checking config file
13:36:35 [Import Config] lastImportedConfFile : 1770380055.2470765
13:36:35 [Import Config] fileModifiedTime : 1770380055.2470765
13:36:35 [Import Config] skipping config file import
13:36:35 [check_and_run_user_event] User Execution Queue is empty
13:36:35 [API] Update API starting
13:36:35 [API] periodic_write is already running.
13:36:35 [SSE] Broadcasted event: state_update
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_appevents.json|2653925397721363331|2653925397721363331)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_devices.json|-7714812334277170245|-7714812334277170245)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_events_pending_alert.json|-4748823668498910014|-4748823668498910014)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_settings.json|-5434946670036614569|-5434946670036614569)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_plugins_events.json|-4748823668498910014|-4748823668498910014)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_plugins_history.json|-6392182191413410779|-6392182191413410779)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_plugins_objects.json|-8250939578330521192|-8250939578330521192)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_plugins_language_strings.json|-9117770155166865930|-9117770155166865930)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_notifications.json|-313760943203148307|-313760943203148307)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_online_history.json|-7663158852817754842|-7663158852817754842)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_devices_tiles.json|7357630314619815947|7357630314619815947)
13:36:35 [API] api_endpoint_class: Hashes (file|old|new): (table_devices_filters.json|-293370180942433435|-293370180942433435)
Docker Logs
PASTE DOCKER LOG HERE. Using the triple backticks preserves format.
What installation are you running?
Production (netalertx) 📦
Is there an existing issue for this?
The issue occurs in the following browsers. Select at least 2.
Current Behavior
When navigating to Maintenance/Tools and clicking "Delete all devices", it just pops up a message in the browser:
Error: Validation Error: Input should be a valid listNo devices are deleted.
Expected Behavior
I expect all devices to be deleted.
Steps To Reproduce
I have tried to find a way to clear all devices, but with no success. So for me this always happens, 100% of the time. I did try disabling a few plugins (specifically OMDSDNOPENAPI), but that didn't change anything either.
This is basically a test-installation to see if it does what I need. It's relatively bare bones and not a lot of settings have been adjusted. Not quite "stock", but very close.
Relevant
app.confsettingsdocker-compose.yml
Debug or Trace enabled
Relevant
app.logsectionDocker Logs