Skip to content

Unable to "Delete all devices": Input should be a valid list #1493

@Creat

Description

@Creat

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.

  • Firefox
  • Chrome
  • Edge
  • Safari (unsupported) - PRs welcome
  • N/A - This is an issue with the backend

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

  • I have read and followed the steps in the wiki link above and provided the required debug logs and the log section covers the time when the issue occurs.

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Workaround provided ⚒️A workaround for the issue was provided so no further actions will be taken.bug 🐛Something isn't workingnext release/in dev image 🚀This is coming in the next release or was already released if the issue is Closed.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions