Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add bulk import for Contact Assignments #11307

Closed
stavr666 opened this issue Dec 26, 2022 · 21 comments · Fixed by #13109
Closed

Add bulk import for Contact Assignments #11307

stavr666 opened this issue Dec 26, 2022 · 21 comments · Fixed by #13109
Assignees
Labels
status: accepted This issue has been accepted for implementation type: feature Introduction of new functionality to the application

Comments

@stavr666
Copy link

stavr666 commented Dec 26, 2022

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

@stavr666 stavr666 added the type: feature Introduction of new functionality to the application label Dec 26, 2022
@jeremystretch
Copy link
Member

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 jeremystretch added the status: revisions needed This issue requires additional information to be actionable label Jan 5, 2023
@stavr666
Copy link
Author

stavr666 commented 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.

@MalfuncEddie
Copy link

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.

@jdavidson2021
Copy link

jdavidson2021 commented Jan 25, 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
Copy link
Contributor

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 github-actions bot added the pending closure Requires immediate attention to avoid being closed for inactivity label Apr 26, 2023
@stavr666
Copy link
Author

stavr666 commented 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
Copy link
Member

abhi1693 commented May 2, 2023

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

@jeremystretch
Copy link
Member

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
Copy link
Author

stavr666 commented 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

@jdavidson2021
Copy link

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
Copy link

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?

@opericgithub
Copy link

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?

@Dakson13
Copy link

After analyzing the postgresql query (which i explained in #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
Copy link

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 ?

@stavr666
Copy link
Author

stavr666 commented Jun 2, 2023

@opericgithub
image

@opericgithub
Copy link

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

@abhi1693
Copy link
Member

abhi1693 commented Jun 2, 2023

Please update your description with the proposal.

@opericgithub
Copy link

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

@kkthxbye-code
Copy link
Contributor

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
Copy link
Author

stavr666 commented 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

@kkthxbye-code kkthxbye-code added status: needs owner This issue is tentatively accepted pending a volunteer committed to its implementation and removed status: revisions needed This issue requires additional information to be actionable pending closure Requires immediate attention to avoid being closed for inactivity labels Jul 4, 2023
@kkthxbye-code kkthxbye-code changed the title Bulk add/change Contact Assignments Add bulk import for Contact Assignments Jul 4, 2023
@kkthxbye-code
Copy link
Contributor

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.

@abhi1693 abhi1693 self-assigned this Jul 6, 2023
@abhi1693 abhi1693 added status: accepted This issue has been accepted for implementation and removed status: needs owner This issue is tentatively accepted pending a volunteer committed to its implementation labels Jul 6, 2023
jeremystretch added a commit that referenced this issue Jul 28, 2023
* adds contact assignment bulk import #11307

* Remove unsupported tags field added by NetBoxModelImportForm

---------

Co-authored-by: Jeremy Stretch <[email protected]>
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Oct 27, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
status: accepted This issue has been accepted for implementation type: feature Introduction of new functionality to the application
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants