mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Add bulk import for Contact Assignments #7420
Closed
opened 2025-12-29 20:23:14 +01:00 by adam
·
21 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#7420
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 @stavr666 on GitHub (Dec 26, 2022).
Originally assigned to: @abhi1693 on GitHub.
NetBox version
v3.4.1
Feature type
New functionality
Proposed functionality
Add bulk import functionality for Contact Assignments.
Use case
We use contacts to describe the following entities:
Often it turns out, that some contacts changes over time or server usage scenarios changed. So, bunch of assignments must be updated.
For some reason, there is no way to do it in UI, only by API.
Database changes
No response
External dependencies
No response
@jeremystretch commented on GitHub (Jan 5, 2023):
Please provide more detail in your proposal. What is the specific workflow you envision? What new UI controls, if any, will be needed to accomplish this?
@stavr666 commented on GitHub (Jan 9, 2023):
Dunno how your code build (or if it's actually hard to make), but from user's perspective result must look pretty similar to Interfaces panel in Devices/VMs, in Tenant Section.
We already have Contact Assignment in api, just add it's representation in GUI. As result, all already working in GUI flows with bulk change/remove/update for interfaces must work similar for Assigned Contacts, with (almost) same "object" field, bunch of filters (by role, by group, by priority) and ability to change or upload list of updated/new assignments. ID of assignment as key, object not changeable. Contact, role, group and priority updatable.
@MalfuncEddie commented on GitHub (Jan 19, 2023):
my 2 cents:
Add a contact-assignments view where (table with filter tab such as devices/vm's) this allows you to filter (eg: filter on Object Type,object role or priority). just like device/vms table/filter view you can "edit selected/delete selected"
Add to every object that could have contact (dcim.vms ....) at the table/filter view option by either a button "add contact on selected " or changing the "edit selected" form to add a contact assignment to all selected objects. -> I currently use a custom script with a filter that assigns a contact to the object (inspiration from the contact migration script)
I think point 1 should be fairly easy (will try (If I find some time)) to look into it.
@jdavidson2021 commented on GitHub (Jan 26, 2023):
Would it be possible to extend the field import list on the racks, devices, virtual machine, and tenant imports to include contact_name, contact_group, contact_role, & contact_priority as optional fields (similar to tenant assignments on devices/racks)? This would allow for the contact assignments to be created or updated via import since we can now update objects via import.
@github-actions[bot] commented on GitHub (Apr 26, 2023):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Do not attempt to circumvent this process by "bumping" the issue; doing so will result in its immediate closure and you may be barred from participating in any future discussions. Please see our contributing guide.
@stavr666 commented on GitHub (May 2, 2023):
Looks like #11584 added working assignment view to 3.5.0. Export also seems fine.
@jeremystretch any chance, someone will work on adding import/update functionality to this view in nearby future?
P.S. Add button not working on demo, it's internal bug or global?
@abhi1693 commented on GitHub (May 2, 2023):
That page should not have a
addbutton. That's a bug in the code@jeremystretch commented on GitHub (May 2, 2023):
This has been open for months without any real implementation proposed. @stavr666 would you like to revise your proposal above with sufficient detail, or should we close this out?
@stavr666 commented on GitHub (May 2, 2023):
I'm sorry, missed the point, that my FR not readable (does not involved in other projects as much, as with Netbox, you improving really fast).
I see realization of Import (with Update) UI similar to how it works with Cables.
While Importing, we must have:
@jdavidson2021 commented on GitHub (May 3, 2023):
I didn't get a reply to my previous comment. Is this possible?
Would it be possible to extend the field import list on the racks, devices, virtual machine, and tenant imports to include contact_name, contact_group, contact_role, & contact_priority as optional fields (similar to tenant assignments on devices/racks)? This would allow for the contact assignments to be created or updated via import since we can now update objects via import.
Also, the Add button on Contact Assignments on the Demo gives you the following error:
/tenancy/contact-assignments/add/
The requested page does not exist.
@jdavidson2021 commented on GitHub (May 5, 2023):
Should I open a feature request for these additions or is there a better way to update contacts?
@opericgithub commented on GitHub (May 26, 2023):
Just to summarize my other post which was rejected due to this similar post:
So, it seams that this functionality might be implemented in "contact assignment" section of netbox, where you could allow a button for importing values from csv file. Relevant table columns should be object-id, contact-id, contact-role-id (because it's now required in gui assignment) and object-type-id (so one could define whether he is assigning contacts to devices or tenants etc).
Is this enough info or do you need more details?
@Dakson13 commented on GitHub (May 26, 2023):
After analyzing the postgresql query (which i explained in https://github.com/netbox-community/netbox/issues/12631) thoroughly, i found the log for database changes and inside it i had discovered my import queries:
2023-05-22 12:21:22.264 UTC [200671] netbox@netbox LOG: statement: INSERT INTO "tenancy_contactassignment" ("created", "last_updated", "content_type_id", "object_id", "contact_id", "role_id", "priority") VALUES ('2023-05-22T12:21:22.264072+00:00'::timestamptz, '2023-05-22T12:21:22.264112+00:00'::timestamptz, 21, 16469, 8050, 2, '') RETURNING "tenancy_contactassignment"."id"
2023-05-22 12:21:22.268 UTC [200671] netbox@netbox LOG: statement: INSERT INTO "extras_objectchange" ("time", "user_id", "user_name", "request_id", "action", "changed_object_type_id", "changed_object_id", "related_object_type_id", "related_object_id", "object_repr", "prechange_data", "postchange_data") VALUES ('2023-05-22T12:21:22.267679+00:00'::timestamptz, 2, 'dakson', 'fb239df2-6274-46da-8088-a33422fcb231'::uuid, 'create', 113, 2073, NULL, NULL, '(11)7550 -> 0CD996908AF1 (85488)', NULL, '{"created": "2023-05-22T12:21:22.264Z", "last_updated": "2023-05-22T12:21:22.264Z", "content_type": 21, "object_id": 16469, "contact": 8050, "role": 2, "priority": ""}') RETURNING "extras_objectchange"."id"
In the first log statement i tried an example where i associated tenants (in this case devices) with their contacts using their IDs which are: object_id (id of a device) and contact_id (id of a contact). That query created a new contact-assignment with it's unique id.
Regards to the other log statement, thats the data that is written to the log that we see in the GUI, after i imported the necessary data into the contact-assignment query.
So if bulk import for Contact Assignments ever gets implament i would be extremely grateful, because it would make my as well as many others peoples work easier.😀
@opericgithub commented on GitHub (Jun 1, 2023):
@stavr666 can you please explain to us in detail how did you assign contacts via api ?
@stavr666 commented on GitHub (Jun 2, 2023):
@opericgithub

@opericgithub commented on GitHub (Jun 2, 2023):
Thanx @stavr666.
As Dakson13 pointed out, there are few fields that can be used in GUI "contact assignment" section, to assign contacts to objects. Combined with this stavr666's API screenshot, those fields would be: "content_type_id", "object_id", "contact_id", "role_id" and maybe priority.
@jeremystretch I'm sorry, maybe I wasn't clear enough, this question above was meant for you :)
@abhi1693 commented on GitHub (Jun 2, 2023):
Please update your description with the proposal.
@opericgithub commented on GitHub (Jun 2, 2023):
"contact assignment" section (organization -> contacts -> contact assignment) should have a new import button, which will allow to bulk import (and probably also update) contact assignments via CSV file. Relevant fields should be: "content_type_id", "object_id", "contact_id", "role_id" and maybe "priority".
@kkthxbye-code commented on GitHub (Jul 4, 2023):
I think we can accept this if it is for the bulk import, that is csv/json/yaml import/update, however the original FR makes it sound like an UI view (i.e. a form) is what is requested. @stavr666 could you clarify the original post?
@stavr666 commented on GitHub (Jul 4, 2023):
We need a way to upload dozens contacts in UI, so adding/updating can be delegated in Netbox (without API-related code).
The way it works with interfaces totally fine:

@kkthxbye-code commented on GitHub (Jul 4, 2023):
I've accepted this with the caveat that I don't know if there's any good reason why it can't be done easily. The accepted FR is only for the bulk import view, that is csv/json/yam import+update.
Open for volunteers.