Add bulk import for Contact Assignments #7420

Closed
opened 2025-12-29 20:23:14 +01:00 by adam · 21 comments
Owner

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:

  • Physical server owner;
  • Virtual server users (from business-PoV);
  • Financially responsible unit (for any type of assets);
  • On-site and competence-related engineers;
  • External support/contractors;
  • Maintenance notifications targets (this one currently in json file on Git, but transition in process).

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

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: - Physical server owner; - Virtual server users (from business-PoV); - Financially responsible unit (for any type of assets); - On-site and competence-related engineers; - External support/contractors; - Maintenance notifications targets (this one currently in json file on Git, but transition in process). 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_
adam added the status: acceptedtype: feature labels 2025-12-29 20:23:14 +01:00
adam closed this issue 2025-12-29 20:23:14 +01:00
Author
Owner

@jeremystretch commented on GitHub (Jan 5, 2023):

Add UI-way (user-friendly) to bulk-add and bulk-update for Contact Assignments.

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?

@jeremystretch commented on GitHub (Jan 5, 2023): > Add UI-way (user-friendly) to bulk-add and bulk-update for Contact Assignments. 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?
Author
Owner

@stavr666 commented on GitHub (Jan 9, 2023):

What is the specific workflow you envision? What new UI controls, if any, will be needed to accomplish this?

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.

@stavr666 commented on GitHub (Jan 9, 2023): > What is the specific workflow you envision? What new UI controls, if any, will be needed to accomplish this? 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.
Author
Owner

@MalfuncEddie commented on GitHub (Jan 19, 2023):

my 2 cents:

  1. 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"

  2. 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.

@MalfuncEddie commented on GitHub (Jan 19, 2023): my 2 cents: 1. 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" 2. 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.
Author
Owner

@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.

@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.
Author
Owner

@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.

@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](https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md).
Author
Owner

@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?

@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](https://demo.netbox.dev/tenancy/contact-assignments/add/), it's internal bug or global?
Author
Owner

@abhi1693 commented on GitHub (May 2, 2023):

That page should not have a add button. That's a bug in the code

@abhi1693 commented on GitHub (May 2, 2023): That page should not have a `add` button. That's a bug in the code
Author
Owner

@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?

@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?
Author
Owner

@stavr666 commented on GitHub (May 2, 2023):

without any real implementation proposed

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:

  • Object Type - required
  • Object - required
  • Contact - required
  • Role - optional if update, required if create new
  • Priority - optional
  • ID - optional, indicating update logic
@stavr666 commented on GitHub (May 2, 2023): > without any real implementation proposed 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: - **Object Type** - required - **Object** - required - **Contact** - required - **Role** - optional if update, required if create new - **Priority** - optional - **ID** - optional, indicating update logic
Author
Owner

@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 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.
Author
Owner

@jdavidson2021 commented on GitHub (May 5, 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.

Should I open a feature request for these additions or is there a better way to update contacts?

@jdavidson2021 commented on GitHub (May 5, 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. Should I open a feature request for these additions or is there a better way to update contacts?
Author
Owner

@opericgithub commented on GitHub (May 26, 2023):

Just to summarize my other post which was rejected due to this similar post:

"Currently there is no gui possibility to bulk-assign many contacts to many objects. The only way we have found is by directly modifying database with "insert into tenancy.contact (...) values (...)(...) etc " which may be very hazardous.

There should be an gui option to link the ID of the contact with the ID of the object, let's say a device.

Use case
We have thousands of devices representing physical IP phones, and also have thousands of contacts, each of them representing the phone number of the IP phone.

We would like to link all of the contacts to all of the devices, but there is no way to do that by bulk editing (importing) devices because there is no available contact field option.

If such field existed, it would be easy to link let's say a list of device id's with a list of contact id's.

As for now, we have to edit thousands of devices one-by-one and click "add a contact" button on every single one of them."

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?

@opericgithub commented on GitHub (May 26, 2023): Just to summarize my other post which was rejected due to this similar post: ``` "Currently there is no gui possibility to bulk-assign many contacts to many objects. The only way we have found is by directly modifying database with "insert into tenancy.contact (...) values (...)(...) etc " which may be very hazardous. There should be an gui option to link the ID of the contact with the ID of the object, let's say a device. Use case We have thousands of devices representing physical IP phones, and also have thousands of contacts, each of them representing the phone number of the IP phone. We would like to link all of the contacts to all of the devices, but there is no way to do that by bulk editing (importing) devices because there is no available contact field option. If such field existed, it would be easy to link let's say a list of device id's with a list of contact id's. As for now, we have to edit thousands of devices one-by-one and click "add a contact" button on every single one of them." ``` 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?
Author
Owner

@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.😀

@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.😀
Author
Owner

@opericgithub commented on GitHub (Jun 1, 2023):

We already have Contact Assignment in api, just add it's representation in GUI.

@stavr666 can you please explain to us in detail how did you assign contacts via api ?

@opericgithub commented on GitHub (Jun 1, 2023): > We already have Contact Assignment in api, just add it's representation in GUI. @stavr666 can you please explain to us in detail how did you assign contacts via api ?
Author
Owner

@stavr666 commented on GitHub (Jun 2, 2023):

@opericgithub
image

@stavr666 commented on GitHub (Jun 2, 2023): @opericgithub ![image](https://github.com/netbox-community/netbox/assets/84839985/3aefb136-d7e4-40e7-ac5c-00d8a3fab27d)
Author
Owner

@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.

Is this enough info or do you need more details?

@jeremystretch I'm sorry, maybe I wasn't clear enough, this question above was meant for you :)

@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. > Is this enough info or do you need more details? @jeremystretch I'm sorry, maybe I wasn't clear enough, this question above was meant for you :)
Author
Owner

@abhi1693 commented on GitHub (Jun 2, 2023):

Please update your description with the proposal.

@abhi1693 commented on GitHub (Jun 2, 2023): Please update your description with the proposal.
Author
Owner

@opericgithub commented on GitHub (Jun 2, 2023):

Please update your description with the proposal.

"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".

@opericgithub commented on GitHub (Jun 2, 2023): > Please update your description with the proposal. "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".
Author
Owner

@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?

@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?
Author
Owner

@stavr666 commented on GitHub (Jul 4, 2023):

the original FR makes it sound like an UI view (i.e. a form) is what is requested

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:
image

@stavr666 commented on GitHub (Jul 4, 2023): > the original FR makes it sound like an UI view (i.e. a form) is what is requested 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: ![image](https://github.com/netbox-community/netbox/assets/84839985/4fc4088c-2261-490d-a747-9cebb7c5b20b)
Author
Owner

@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.

@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.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#7420