From 047f2abdb59efd1a074df087c9dfddc04ebbff7f Mon Sep 17 00:00:00 2001 From: "Thompson, Lon" Date: Fri, 1 Apr 2022 13:59:41 -0400 Subject: [PATCH] adding contact startups --- initializers/contact_groups.yml | 12 +++++++++ initializers/contact_roles.yml | 5 ++++ initializers/contacts.yml | 9 +++++++ startup_scripts/470_contact_groups.py | 36 +++++++++++++++++++++++++++ startup_scripts/480_contact_roles.py | 26 +++++++++++++++++++ startup_scripts/490_contacts.py | 34 +++++++++++++++++++++++++ 6 files changed, 122 insertions(+) create mode 100644 initializers/contact_groups.yml create mode 100644 initializers/contact_roles.yml create mode 100644 initializers/contacts.yml create mode 100644 startup_scripts/470_contact_groups.py create mode 100644 startup_scripts/480_contact_roles.py create mode 100644 startup_scripts/490_contacts.py diff --git a/initializers/contact_groups.yml b/initializers/contact_groups.yml new file mode 100644 index 000000000..222620e31 --- /dev/null +++ b/initializers/contact_groups.yml @@ -0,0 +1,12 @@ +# - name: Network-Team +# slug: network-team +# description: This is a new contact group for the Network-Team +# parent: None +# custom_field_data: +# widget: This is the custom field called widget +# - name: New Contact Group +# slug: new-contact-group +# description: This is a new contact group sub under of Network-Team +# parent: Network-Team +# custom_field_data: +# widget: This is the custom field called widget diff --git a/initializers/contact_roles.yml b/initializers/contact_roles.yml new file mode 100644 index 000000000..dd612d980 --- /dev/null +++ b/initializers/contact_roles.yml @@ -0,0 +1,5 @@ +# - name: New Contact Role +# slug: new-contact-role +# description: This is a new contact role description +# custom_field_data: +# widget: This is the custom field called widget diff --git a/initializers/contacts.yml b/initializers/contacts.yml new file mode 100644 index 000000000..d7a2309c4 --- /dev/null +++ b/initializers/contacts.yml @@ -0,0 +1,9 @@ +# - name: Lee Widget +# group: Network-Team +# title: CEO of Widget Corp +# phone: 221-555-1212 +# email: widgetCEO@widgetcorp.com +# address: 1200 Nowhere Blvd, Scranton NJ, 555111 +# comments: This is a very important contact +# custom_field_data: +# widget: This is the custom field called widget diff --git a/startup_scripts/470_contact_groups.py b/startup_scripts/470_contact_groups.py new file mode 100644 index 000000000..f5fc4fdf1 --- /dev/null +++ b/startup_scripts/470_contact_groups.py @@ -0,0 +1,36 @@ +import sys + +from startup_script_utils import ( + load_yaml, + pop_custom_fields, + set_custom_fields_values, + split_params, +) +from tenancy.models import ContactGroup + +contact_groups = load_yaml("/opt/netbox/initializers/contact_groups.yml") + +if contact_groups is None: + sys.exit() + +optional_assocs = {"parent": (ContactGroup, "name")} + +for params in contact_groups: + custom_field_data = pop_custom_fields(params) + + for assoc, details in optional_assocs.items(): + if assoc in params: + model, field = details + query = {field: params.pop(assoc)} + + params[assoc] = model.objects.get(**query) + + matching_params, defaults = split_params(params) + contact_group, created = ContactGroup.objects.get_or_create( + **matching_params, defaults=defaults + ) + + if created: + print("🔳 Created Contact Group", contact_group.name) + + set_custom_fields_values(contact_group, custom_field_data) diff --git a/startup_scripts/480_contact_roles.py b/startup_scripts/480_contact_roles.py new file mode 100644 index 000000000..1b3d8bc8b --- /dev/null +++ b/startup_scripts/480_contact_roles.py @@ -0,0 +1,26 @@ +import sys + +from startup_script_utils import ( + load_yaml, + pop_custom_fields, + set_custom_fields_values, + split_params, +) +from tenancy.models import ContactRole + +contact_roles = load_yaml("/opt/netbox/initializers/contact_roles.yml") + +if contact_roles is None: + sys.exit() + + +for params in contact_roles: + custom_field_data = pop_custom_fields(params) + + matching_params, defaults = split_params(params) + contact_role, created = ContactRole.objects.get_or_create(**matching_params, defaults=defaults) + + if created: + print("🔳 Created Contact Role", contact_role.name) + + set_custom_fields_values(contact_role, custom_field_data) diff --git a/startup_scripts/490_contacts.py b/startup_scripts/490_contacts.py new file mode 100644 index 000000000..80d75d668 --- /dev/null +++ b/startup_scripts/490_contacts.py @@ -0,0 +1,34 @@ +import sys + +from startup_script_utils import ( + load_yaml, + pop_custom_fields, + set_custom_fields_values, + split_params, +) +from tenancy.models import Contact, ContactGroup + +contacts = load_yaml("/opt/netbox/initializers/contacts.yml") + +if contacts is None: + sys.exit() + +optional_assocs = {"group": (ContactGroup, "name")} + +for params in contacts: + custom_field_data = pop_custom_fields(params) + + for assoc, details in optional_assocs.items(): + if assoc in params: + model, field = details + query = {field: params.pop(assoc)} + + params[assoc] = model.objects.get(**query) + + matching_params, defaults = split_params(params) + contact, created = Contact.objects.get_or_create(**matching_params, defaults=defaults) + + if created: + print("👩‍💻 Created Contact", contact.name) + + set_custom_fields_values(contact, custom_field_data)