diff --git a/initializers/contact_groups.yml b/initializers/contact_groups.yml new file mode 100644 index 0000000..a3ead09 --- /dev/null +++ b/initializers/contact_groups.yml @@ -0,0 +1,7 @@ +# - name: Network-Team +# slug: network-team +# description: This is a new contact group for the Network-Team +# - name: New Contact Group +# slug: new-contact-group +# description: This is a new contact group sub under of Network-Team +# parent: Network-Team diff --git a/initializers/contact_roles.yml b/initializers/contact_roles.yml new file mode 100644 index 0000000..1a72e43 --- /dev/null +++ b/initializers/contact_roles.yml @@ -0,0 +1,3 @@ +# - name: New Contact Role +# slug: new-contact-role +# description: This is a new contact role description diff --git a/initializers/contacts.yml b/initializers/contacts.yml new file mode 100644 index 0000000..3ab41a2 --- /dev/null +++ b/initializers/contacts.yml @@ -0,0 +1,20 @@ +# - name: Lee Widget +# 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 +# - name: Ali Gator +# group: Network-Team +# title: Consultant for Widget Corp +# phone: 221-555-1213 +# email: Consultant@widgetcorp.com +# address: 1200 Nowhere Blvd, Scranton NJ, 555111 +# comments: This is a very important contact +# - name: Karlchen Maier +# group: New Contact Group +# title: COO of Widget Corp +# phone: 221-555-1214 +# email: Karlchen@widgetcorp.com +# address: 1200 Nowhere Blvd, Scranton NJ, 555111 +# comments: This is a very important contact diff --git a/startup_scripts/470_contact_groups.py b/startup_scripts/470_contact_groups.py new file mode 100644 index 0000000..f5fc4fd --- /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 0000000..1b3d8bc --- /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 0000000..80d75d6 --- /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)