mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
process_event_rules() broke all events when condition evaluation contains None values. #11251
Closed
opened 2025-12-29 21:42:28 +01:00 by adam
·
14 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#11251
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @ravenrs on GitHub (Jun 3, 2025).
Originally assigned to: @jeremystretch on GitHub.
Deployment Type
Self-hosted
NetBox Version
v4.2.2
Python Version
3.12
Steps to Reproduce
here is my system config:
netbox.json
Here we see that there is no any request received only one that we have already received.
I've added try except to code just to show the place of exception:
Here is exeption.
Expected Behavior
Event won't added to queue, don't brake all events in cycle or it can be validate somehow while creating event with such mistakes.
Observed Behavior
All events include an event with a condition containing an error, which runs in a loop after this problematic event with the same obj_type, and actions are not added to the queue as expected.
@jnovinger commented on GitHub (Jun 3, 2025):
Thank you for opening a bug report, @ravenrs . Unfortunately, the information you have provided is not sufficient for someone else to attempt to reproduce the reported behavior. Remember, each bug report must include detailed steps that someone else can follow on a clean, empty NetBox installation to reproduce the exact problem you're experiencing. These instructions should include the creation of any involved objects, any configuration changes, and complete accounting of the actions being taken. Also be sure that your report does not reference data on the public NetBox demo, as that is subject to change at any time by an outside party and cannot be relied upon for bug reports.
@ravenrs commented on GitHub (Jun 4, 2025):
@jnovinger Hi, trust me it's enough to reproduce, I do the same in Prod/Test/Dev enviroment. Only you need the same version and event with condition that contains error, but ok, I will explain all steps from scratch.
@ravenrs commented on GitHub (Jun 4, 2025):
@jnovinger I've change description of issue, but it doesn't matter what to change site/device, all events with the same obj_type won't added to queue and will drop silence.
@jnovinger commented on GitHub (Jun 4, 2025):
Thanks, I'll take a look at the updated STR as soon as I can.
@github-actions[bot] commented on GitHub (Jun 12, 2025):
This is a reminder that additional information is needed in order to further triage this issue. If the requested details are not provided, the issue will soon be closed automatically.
@ravenrs commented on GitHub (Jun 12, 2025):
@jnovinger please update status here
@ravenrs commented on GitHub (Jul 4, 2025):
@jnovinger Hi, I've fixed it, could you assign issue to me, to submit pull request.
@jeremystretch commented on GitHub (Jul 8, 2025):
I'm not sure what you're trying to say here, but this appears to be working as expected on NetBox v4.3.3. The event rule does not trigger because the constraint is invalid:
attrshould betenant.namerather thandata.tenant.name. However, other event rules still trigger successfully after a failure.@ravenrs commented on GitHub (Jul 8, 2025):
@jeremystretch
Event doesn't return False and just skipped, it was a cause of TypeError. I've checked source of 4.3.3:
there is no "try except" in this cycle, so depending on the queue in this cycle, all subsequent events will be skipped.
I can test it on my local 4.3.3, if you want, but I don't think it's necessary, I added pull request to avoid Type error, but I didn't add try exept to this cycle so theoretically the result will be the same if some error appears. Do you agree?
@jeremystretch commented on GitHub (Jul 8, 2025):
@ravenrs if you test for the behavior I've described you'll find that my statement is accurate.
The root issue here appears to be that the TypeError exception raised by the
eval_contains()method when passed a null value is being accidentally swallowed by theflush_events()handler. So, the first step it to fix that, and ensure that any exception unrelated to the import of a function are raised appropriately. This will result in the TypeError being uncaught, exposing the secondary bug.The secondary bug is that an invalid
attrdefinition can result in passing an unexpected type to the evaluator methods. In this case, we're passingNonewhere an iterable is expected, but I'm sure there are others. The fix for this is to catch and appropriately log any TypeError, ValueError, or similar exceptions.@ravenrs are you interested in pursuing this work?
@ravenrs commented on GitHub (Jul 8, 2025):
@jeremystretch Yes, Im interested, I've implement workaround in my production environment, but i'm interested to have it in Upstream. I will check flush_events().
@ravenrs commented on GitHub (Jul 10, 2025):
@jeremystretch Please check my approach to fix this issue and share your mind. thanks.
@ravenrs commented on GitHub (Jul 15, 2025):
@jeremystretch I've just tested it on the latest 4.3.3. Unfortunately, the bug is still there - the same thing happens in the function process_event_rules. The problem is the first event rule causes an exception inside the cycle. It drops the processing of next events with similar event_type/object_type.
Please take into account that this is the reason I'd raised bug report, not the improper logging or insufficient error types in the flush_events()'s try-except.
It was by design, but it's not the reason to raise the bug report.
I do understand that more error types should be caught there for proper logging, but it doesn't fix the issue of dropped processing of events.
You are right, there is a problem with improper error logging, but it is not the root cause of the issue I'd raised.
The TypeError was caught by not accurate exception handler.
So let's separate it to two issues:
Proposed solution for issues:
1.1. Added few more possible error types to cover different type to flush_events function.
2.1. Return False instead of raising TypeError while the evaluating rules. This should prevent cycle crush which drops processing of next events with similar event_type/obj_type.
2.2. Add try-except with proper logging to cycle in process_event_rules, process_event_queue to prevent cycle interruption.
2.3. It will be good, despite it's unnecessary, to add condition check like it work with permission rule and constrains. What do I mean: you can't add constrains with non-existence attribute of object.
P.S.: In general. The root cause analysis in my company has identified that for new event rules we need to review event rule conditions on the NetBox test server to prevent one event from breaking the processing of other events (for the same object/event type).
@jeremystretch commented on GitHub (Jul 15, 2025):
@ravenrs I'm sorry but I don't have time to discuss this any further. It seems the guidance I provided above was insufficient, so I'm happy to take ownership of this issue myself.