From b554e70edac42d2aa80a8c881dce0b70b48df4d3 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 24 Jan 2024 16:00:37 -0500 Subject: [PATCH] Squash migrations --- .../migrations/0003_extend_tag_support.py | 20 - .../circuits/migrations/0003_squashed_0037.py | 127 ++ .../migrations/0004_rename_cable_peer.py | 21 - .../migrations/0032_provider_service_id.py | 17 - .../migrations/0033_standardize_id_fields.py | 44 - .../migrations/0034_created_datetimefield.py | 38 - .../circuits/migrations/0035_provider_asns.py | 19 - ...uit_termination_date_tags_custom_fields.py | 28 - .../migrations/0037_new_cabling_models.py | 16 - .../migrations/0038_cabling_cleanup.py | 20 - ...ovideraccount.py => 0038_squashed_0042.py} | 106 +- .../migrations/0039_unique_constraints.py | 39 - .../0040_provider_remove_deprecated_fields.py | 59 - .../0041_standardize_description_comments.py | 18 - ...{0001_initial.py => 0001_squashed_0005.py} | 74 +- netbox/core/migrations/0002_managedfile.py | 40 - netbox/core/migrations/0003_job.py | 39 - .../migrations/0004_replicate_jobresults.py | 46 - .../migrations/0005_job_created_auto_now.py | 18 - .../dcim/migrations/0131_consoleport_speed.py | 21 - netbox/dcim/migrations/0131_squashed_0159.py | 1194 +++++++++++++++++ netbox/dcim/migrations/0132_cable_length.py | 16 - netbox/dcim/migrations/0133_port_colors.py | 32 - .../migrations/0134_interface_wwn_bridge.py | 23 - .../migrations/0135_tenancy_extensions.py | 23 - netbox/dcim/migrations/0136_device_airflow.py | 21 - .../0137_relax_uniqueness_constraints.py | 83 -- .../migrations/0138_extend_tag_support.py | 50 - .../dcim/migrations/0139_rename_cable_peer.py | 91 -- netbox/dcim/migrations/0140_wireless.py | 49 - netbox/dcim/migrations/0141_asn_model.py | 19 - .../migrations/0142_rename_128gfc_qsfp28.py | 29 - .../0143_remove_primary_for_related_name.py | 23 - .../migrations/0144_fix_cable_abs_length.py | 31 - .../0145_site_remove_deprecated_fields.py | 59 - netbox/dcim/migrations/0146_modules.py | 279 ---- .../dcim/migrations/0147_inventoryitemrole.py | 38 - .../0148_inventoryitem_component.py | 23 - .../0149_inventoryitem_templates.py | 43 - netbox/dcim/migrations/0150_interface_vrf.py | 20 - .../migrations/0151_interface_speed_duplex.py | 23 - .../migrations/0152_standardize_id_fields.py | 274 ---- .../migrations/0153_created_datetimefield.py | 208 --- .../migrations/0154_half_height_rack_units.py | 23 - .../0155_interface_poe_mode_type.py | 33 - .../dcim/migrations/0156_location_status.py | 18 - .../migrations/0157_new_cabling_models.py | 95 -- .../0158_populate_cable_terminations.py | 87 -- .../migrations/0159_populate_cable_paths.py | 50 - .../migrations/0160_populate_cable_ends.py | 46 - ...e_constraints.py => 0160_squashed_0166.py} | 296 +++- .../dcim/migrations/0161_cabling_cleanup.py | 134 -- netbox/dcim/migrations/0163_weight_fields.py | 72 - .../migrations/0164_rack_mounting_depth.py | 18 - .../0165_standardize_description_comments.py | 78 -- .../migrations/0166_virtualdevicecontext.py | 54 - netbox/dcim/migrations/0167_module_status.py | 18 - netbox/dcim/migrations/0167_squashed_0182.py | 251 ++++ .../0168_interface_template_enabled.py | 22 - .../0169_devicetype_default_platform.py | 19 - netbox/dcim/migrations/0170_configtemplate.py | 28 - .../0171_cabletermination_change_logging.py | 21 - .../0172_larger_power_draw_values.py | 42 - .../migrations/0173_remove_napalm_fields.py | 19 - .../0174_device_latitude_device_longitude.py | 22 - .../migrations/0174_rack_starting_unit.py | 18 - netbox/dcim/migrations/0175_device_oob_ip.py | 25 - .../0176_device_component_counters.py | 83 -- .../0177_devicetype_component_counters.py | 83 -- .../0178_virtual_chassis_member_counter.py | 31 - .../0179_interfacetemplate_rf_role.py | 18 - .../dcim/migrations/0180_powerfeed_tenant.py | 20 - .../0181_rename_device_role_device_role.py | 35 - .../migrations/0182_zero_length_cable_fix.py | 22 - .../0060_customlink_button_class.py | 16 - .../extras/migrations/0060_squashed_0086.py | 510 +++++++ .../migrations/0061_extras_change_logging.py | 51 - .../0062_clear_secrets_changelog.py | 26 - .../migrations/0063_webhook_conditions.py | 18 - .../extras/migrations/0064_configrevision.py | 20 - .../0065_imageattachment_change_logging.py | 16 - .../0066_customfield_name_validation.py | 34 - .../0067_customfield_min_max_values.py | 21 - .../0068_configcontext_cluster_types.py | 18 - .../migrations/0069_custom_object_field.py | 18 - .../migrations/0070_customlink_enabled.py | 18 - .../migrations/0071_standardize_id_fields.py | 89 -- .../migrations/0072_created_datetimefield.py | 53 - .../0073_journalentry_tags_custom_fields.py | 23 - .../migrations/0074_customfield_extensions.py | 27 - .../0075_configcontext_locations.py | 19 - .../migrations/0076_tag_slug_unicode.py | 18 - .../0077_customlink_extend_text_and_url.py | 21 - .../migrations/0078_unique_constraints.py | 27 - .../extras/migrations/0079_scheduled_jobs.py | 31 - .../0080_customlink_content_types.py | 32 - .../0081_exporttemplate_content_types.py | 40 - netbox/extras/migrations/0082_savedfilter.py | 35 - netbox/extras/migrations/0083_search.py | 44 - netbox/extras/migrations/0084_staging.py | 45 - netbox/extras/migrations/0085_synced_data.py | 65 - .../extras/migrations/0086_configtemplate.py | 35 - netbox/extras/migrations/0087_dashboard.py | 25 - .../extras/migrations/0087_squashed_0098.py | 156 +++ .../migrations/0088_jobresult_webhooks.py | 23 - .../0089_customfield_is_cloneable.py | 18 - .../0090_objectchange_index_request_id.py | 18 - .../migrations/0091_create_managedfiles.py | 79 -- .../migrations/0092_delete_jobresult.py | 16 - .../0093_configrevision_ordering.py | 17 - .../migrations/0094_tag_object_types.py | 22 - netbox/extras/migrations/0095_bookmarks.py | 34 - .../migrations/0096_customfieldchoiceset.py | 62 - .../0097_customfield_remove_choices.py | 17 - ..._webhook_custom_field_data_webhook_tags.py | 25 - .../migrations/0047_prefix_depth_children.py | 21 - netbox/ipam/migrations/0047_squashed_0053.py | 143 ++ .../0048_prefix_populate_depth_children.py | 37 - .../migrations/0049_prefix_mark_utilized.py | 16 - netbox/ipam/migrations/0050_iprange.py | 43 - .../migrations/0051_extend_tag_support.py | 30 - netbox/ipam/migrations/0052_fhrpgroup.py | 58 - netbox/ipam/migrations/0053_asn_model.py | 36 - netbox/ipam/migrations/0054_squashed_0067.py | 393 ++++++ .../migrations/0054_vlangroup_min_max_vids.py | 25 - .../ipam/migrations/0055_servicetemplate.py | 33 - .../migrations/0056_standardize_id_fields.py | 99 -- .../migrations/0057_created_datetimefield.py | 88 -- .../0058_ipaddress_nat_inside_nonunique.py | 17 - netbox/ipam/migrations/0059_l2vpn.py | 60 - .../ipam/migrations/0060_alter_l2vpn_slug.py | 18 - netbox/ipam/migrations/0061_fhrpgroup_name.py | 18 - .../migrations/0062_unique_constraints.py | 43 - .../0063_standardize_description_comments.py | 73 - .../migrations/0064_clear_search_cache.py | 31 - netbox/ipam/migrations/0065_asnrange.py | 41 - .../migrations/0066_iprange_mark_utilized.py | 18 - .../migrations/0067_ipaddress_index_host.py | 20 - .../tenancy/migrations/0002_squashed_0011.py | 185 +++ .../migrations/0002_tenant_ordering.py | 15 - netbox/tenancy/migrations/0003_contacts.py | 91 -- .../migrations/0004_extend_tag_support.py | 30 - .../migrations/0005_standardize_id_fields.py | 50 - .../migrations/0006_created_datetimefield.py | 43 - .../tenancy/migrations/0007_contact_link.py | 17 - .../migrations/0008_unique_constraints.py | 35 - .../0009_standardize_description_comments.py | 18 - .../0010_tenant_relax_uniqueness.py | 39 - .../migrations/0011_contactassignment_tags.py | 20 - netbox/users/migrations/0002_squashed_0004.py | 78 ++ .../migrations/0002_standardize_id_fields.py | 27 - .../0003_token_allowed_ips_last_used.py | 23 - .../migrations/0004_netboxgroup_netboxuser.py | 50 - .../migrations/0023_squashed_0036.py | 196 +++ .../0023_virtualmachine_natural_ordering.py | 32 - .../0024_cluster_relax_uniqueness.py | 21 - .../migrations/0025_extend_tag_support.py | 25 - .../migrations/0026_vminterface_bridge.py | 19 - .../migrations/0027_standardize_id_fields.py | 37 - .../migrations/0028_vminterface_vrf.py | 20 - .../migrations/0029_created_datetimefield.py | 38 - .../migrations/0030_cluster_status.py | 18 - .../0031_virtualmachine_site_device.py | 28 - .../0032_virtualmachine_update_sites.py | 27 - .../migrations/0033_unique_constraints.py | 44 - .../0034_standardize_description_comments.py | 23 - .../0035_virtualmachine_interface_count.py | 31 - .../0036_virtualmachine_config_template.py | 20 - ...0001_wireless.py => 0001_squashed_0008.py} | 75 +- .../migrations/0002_standardize_id_fields.py | 27 - .../migrations/0003_created_datetimefield.py | 28 - .../migrations/0004_wireless_tenancy.py | 25 - .../0005_wirelesslink_interface_types.py | 24 - .../migrations/0006_unique_constraints.py | 27 - .../0007_standardize_description_comments.py | 23 - .../migrations/0008_wirelesslan_status.py | 18 - 176 files changed, 3718 insertions(+), 6314 deletions(-) delete mode 100644 netbox/circuits/migrations/0003_extend_tag_support.py create mode 100644 netbox/circuits/migrations/0003_squashed_0037.py delete mode 100644 netbox/circuits/migrations/0004_rename_cable_peer.py delete mode 100644 netbox/circuits/migrations/0032_provider_service_id.py delete mode 100644 netbox/circuits/migrations/0033_standardize_id_fields.py delete mode 100644 netbox/circuits/migrations/0034_created_datetimefield.py delete mode 100644 netbox/circuits/migrations/0035_provider_asns.py delete mode 100644 netbox/circuits/migrations/0036_circuit_termination_date_tags_custom_fields.py delete mode 100644 netbox/circuits/migrations/0037_new_cabling_models.py delete mode 100644 netbox/circuits/migrations/0038_cabling_cleanup.py rename netbox/circuits/migrations/{0042_provideraccount.py => 0038_squashed_0042.py} (50%) delete mode 100644 netbox/circuits/migrations/0039_unique_constraints.py delete mode 100644 netbox/circuits/migrations/0040_provider_remove_deprecated_fields.py delete mode 100644 netbox/circuits/migrations/0041_standardize_description_comments.py rename netbox/core/migrations/{0001_initial.py => 0001_squashed_0005.py} (51%) delete mode 100644 netbox/core/migrations/0002_managedfile.py delete mode 100644 netbox/core/migrations/0003_job.py delete mode 100644 netbox/core/migrations/0004_replicate_jobresults.py delete mode 100644 netbox/core/migrations/0005_job_created_auto_now.py delete mode 100644 netbox/dcim/migrations/0131_consoleport_speed.py create mode 100644 netbox/dcim/migrations/0131_squashed_0159.py delete mode 100644 netbox/dcim/migrations/0132_cable_length.py delete mode 100644 netbox/dcim/migrations/0133_port_colors.py delete mode 100644 netbox/dcim/migrations/0134_interface_wwn_bridge.py delete mode 100644 netbox/dcim/migrations/0135_tenancy_extensions.py delete mode 100644 netbox/dcim/migrations/0136_device_airflow.py delete mode 100644 netbox/dcim/migrations/0137_relax_uniqueness_constraints.py delete mode 100644 netbox/dcim/migrations/0138_extend_tag_support.py delete mode 100644 netbox/dcim/migrations/0139_rename_cable_peer.py delete mode 100644 netbox/dcim/migrations/0140_wireless.py delete mode 100644 netbox/dcim/migrations/0141_asn_model.py delete mode 100644 netbox/dcim/migrations/0142_rename_128gfc_qsfp28.py delete mode 100644 netbox/dcim/migrations/0143_remove_primary_for_related_name.py delete mode 100644 netbox/dcim/migrations/0144_fix_cable_abs_length.py delete mode 100644 netbox/dcim/migrations/0145_site_remove_deprecated_fields.py delete mode 100644 netbox/dcim/migrations/0146_modules.py delete mode 100644 netbox/dcim/migrations/0147_inventoryitemrole.py delete mode 100644 netbox/dcim/migrations/0148_inventoryitem_component.py delete mode 100644 netbox/dcim/migrations/0149_inventoryitem_templates.py delete mode 100644 netbox/dcim/migrations/0150_interface_vrf.py delete mode 100644 netbox/dcim/migrations/0151_interface_speed_duplex.py delete mode 100644 netbox/dcim/migrations/0152_standardize_id_fields.py delete mode 100644 netbox/dcim/migrations/0153_created_datetimefield.py delete mode 100644 netbox/dcim/migrations/0154_half_height_rack_units.py delete mode 100644 netbox/dcim/migrations/0155_interface_poe_mode_type.py delete mode 100644 netbox/dcim/migrations/0156_location_status.py delete mode 100644 netbox/dcim/migrations/0157_new_cabling_models.py delete mode 100644 netbox/dcim/migrations/0158_populate_cable_terminations.py delete mode 100644 netbox/dcim/migrations/0159_populate_cable_paths.py delete mode 100644 netbox/dcim/migrations/0160_populate_cable_ends.py rename netbox/dcim/migrations/{0162_unique_constraints.py => 0160_squashed_0166.py} (58%) delete mode 100644 netbox/dcim/migrations/0161_cabling_cleanup.py delete mode 100644 netbox/dcim/migrations/0163_weight_fields.py delete mode 100644 netbox/dcim/migrations/0164_rack_mounting_depth.py delete mode 100644 netbox/dcim/migrations/0165_standardize_description_comments.py delete mode 100644 netbox/dcim/migrations/0166_virtualdevicecontext.py delete mode 100644 netbox/dcim/migrations/0167_module_status.py create mode 100644 netbox/dcim/migrations/0167_squashed_0182.py delete mode 100644 netbox/dcim/migrations/0168_interface_template_enabled.py delete mode 100644 netbox/dcim/migrations/0169_devicetype_default_platform.py delete mode 100644 netbox/dcim/migrations/0170_configtemplate.py delete mode 100644 netbox/dcim/migrations/0171_cabletermination_change_logging.py delete mode 100644 netbox/dcim/migrations/0172_larger_power_draw_values.py delete mode 100644 netbox/dcim/migrations/0173_remove_napalm_fields.py delete mode 100644 netbox/dcim/migrations/0174_device_latitude_device_longitude.py delete mode 100644 netbox/dcim/migrations/0174_rack_starting_unit.py delete mode 100644 netbox/dcim/migrations/0175_device_oob_ip.py delete mode 100644 netbox/dcim/migrations/0176_device_component_counters.py delete mode 100644 netbox/dcim/migrations/0177_devicetype_component_counters.py delete mode 100644 netbox/dcim/migrations/0178_virtual_chassis_member_counter.py delete mode 100644 netbox/dcim/migrations/0179_interfacetemplate_rf_role.py delete mode 100644 netbox/dcim/migrations/0180_powerfeed_tenant.py delete mode 100644 netbox/dcim/migrations/0181_rename_device_role_device_role.py delete mode 100644 netbox/dcim/migrations/0182_zero_length_cable_fix.py delete mode 100644 netbox/extras/migrations/0060_customlink_button_class.py create mode 100644 netbox/extras/migrations/0060_squashed_0086.py delete mode 100644 netbox/extras/migrations/0061_extras_change_logging.py delete mode 100644 netbox/extras/migrations/0062_clear_secrets_changelog.py delete mode 100644 netbox/extras/migrations/0063_webhook_conditions.py delete mode 100644 netbox/extras/migrations/0064_configrevision.py delete mode 100644 netbox/extras/migrations/0065_imageattachment_change_logging.py delete mode 100644 netbox/extras/migrations/0066_customfield_name_validation.py delete mode 100644 netbox/extras/migrations/0067_customfield_min_max_values.py delete mode 100644 netbox/extras/migrations/0068_configcontext_cluster_types.py delete mode 100644 netbox/extras/migrations/0069_custom_object_field.py delete mode 100644 netbox/extras/migrations/0070_customlink_enabled.py delete mode 100644 netbox/extras/migrations/0071_standardize_id_fields.py delete mode 100644 netbox/extras/migrations/0072_created_datetimefield.py delete mode 100644 netbox/extras/migrations/0073_journalentry_tags_custom_fields.py delete mode 100644 netbox/extras/migrations/0074_customfield_extensions.py delete mode 100644 netbox/extras/migrations/0075_configcontext_locations.py delete mode 100644 netbox/extras/migrations/0076_tag_slug_unicode.py delete mode 100644 netbox/extras/migrations/0077_customlink_extend_text_and_url.py delete mode 100644 netbox/extras/migrations/0078_unique_constraints.py delete mode 100644 netbox/extras/migrations/0079_scheduled_jobs.py delete mode 100644 netbox/extras/migrations/0080_customlink_content_types.py delete mode 100644 netbox/extras/migrations/0081_exporttemplate_content_types.py delete mode 100644 netbox/extras/migrations/0082_savedfilter.py delete mode 100644 netbox/extras/migrations/0083_search.py delete mode 100644 netbox/extras/migrations/0084_staging.py delete mode 100644 netbox/extras/migrations/0085_synced_data.py delete mode 100644 netbox/extras/migrations/0086_configtemplate.py delete mode 100644 netbox/extras/migrations/0087_dashboard.py create mode 100644 netbox/extras/migrations/0087_squashed_0098.py delete mode 100644 netbox/extras/migrations/0088_jobresult_webhooks.py delete mode 100644 netbox/extras/migrations/0089_customfield_is_cloneable.py delete mode 100644 netbox/extras/migrations/0090_objectchange_index_request_id.py delete mode 100644 netbox/extras/migrations/0091_create_managedfiles.py delete mode 100644 netbox/extras/migrations/0092_delete_jobresult.py delete mode 100644 netbox/extras/migrations/0093_configrevision_ordering.py delete mode 100644 netbox/extras/migrations/0094_tag_object_types.py delete mode 100644 netbox/extras/migrations/0095_bookmarks.py delete mode 100644 netbox/extras/migrations/0096_customfieldchoiceset.py delete mode 100644 netbox/extras/migrations/0097_customfield_remove_choices.py delete mode 100644 netbox/extras/migrations/0098_webhook_custom_field_data_webhook_tags.py delete mode 100644 netbox/ipam/migrations/0047_prefix_depth_children.py create mode 100644 netbox/ipam/migrations/0047_squashed_0053.py delete mode 100644 netbox/ipam/migrations/0048_prefix_populate_depth_children.py delete mode 100644 netbox/ipam/migrations/0049_prefix_mark_utilized.py delete mode 100644 netbox/ipam/migrations/0050_iprange.py delete mode 100644 netbox/ipam/migrations/0051_extend_tag_support.py delete mode 100644 netbox/ipam/migrations/0052_fhrpgroup.py delete mode 100644 netbox/ipam/migrations/0053_asn_model.py create mode 100644 netbox/ipam/migrations/0054_squashed_0067.py delete mode 100644 netbox/ipam/migrations/0054_vlangroup_min_max_vids.py delete mode 100644 netbox/ipam/migrations/0055_servicetemplate.py delete mode 100644 netbox/ipam/migrations/0056_standardize_id_fields.py delete mode 100644 netbox/ipam/migrations/0057_created_datetimefield.py delete mode 100644 netbox/ipam/migrations/0058_ipaddress_nat_inside_nonunique.py delete mode 100644 netbox/ipam/migrations/0059_l2vpn.py delete mode 100644 netbox/ipam/migrations/0060_alter_l2vpn_slug.py delete mode 100644 netbox/ipam/migrations/0061_fhrpgroup_name.py delete mode 100644 netbox/ipam/migrations/0062_unique_constraints.py delete mode 100644 netbox/ipam/migrations/0063_standardize_description_comments.py delete mode 100644 netbox/ipam/migrations/0064_clear_search_cache.py delete mode 100644 netbox/ipam/migrations/0065_asnrange.py delete mode 100644 netbox/ipam/migrations/0066_iprange_mark_utilized.py delete mode 100644 netbox/ipam/migrations/0067_ipaddress_index_host.py create mode 100644 netbox/tenancy/migrations/0002_squashed_0011.py delete mode 100644 netbox/tenancy/migrations/0002_tenant_ordering.py delete mode 100644 netbox/tenancy/migrations/0003_contacts.py delete mode 100644 netbox/tenancy/migrations/0004_extend_tag_support.py delete mode 100644 netbox/tenancy/migrations/0005_standardize_id_fields.py delete mode 100644 netbox/tenancy/migrations/0006_created_datetimefield.py delete mode 100644 netbox/tenancy/migrations/0007_contact_link.py delete mode 100644 netbox/tenancy/migrations/0008_unique_constraints.py delete mode 100644 netbox/tenancy/migrations/0009_standardize_description_comments.py delete mode 100644 netbox/tenancy/migrations/0010_tenant_relax_uniqueness.py delete mode 100644 netbox/tenancy/migrations/0011_contactassignment_tags.py create mode 100644 netbox/users/migrations/0002_squashed_0004.py delete mode 100644 netbox/users/migrations/0002_standardize_id_fields.py delete mode 100644 netbox/users/migrations/0003_token_allowed_ips_last_used.py delete mode 100644 netbox/users/migrations/0004_netboxgroup_netboxuser.py create mode 100644 netbox/virtualization/migrations/0023_squashed_0036.py delete mode 100644 netbox/virtualization/migrations/0023_virtualmachine_natural_ordering.py delete mode 100644 netbox/virtualization/migrations/0024_cluster_relax_uniqueness.py delete mode 100644 netbox/virtualization/migrations/0025_extend_tag_support.py delete mode 100644 netbox/virtualization/migrations/0026_vminterface_bridge.py delete mode 100644 netbox/virtualization/migrations/0027_standardize_id_fields.py delete mode 100644 netbox/virtualization/migrations/0028_vminterface_vrf.py delete mode 100644 netbox/virtualization/migrations/0029_created_datetimefield.py delete mode 100644 netbox/virtualization/migrations/0030_cluster_status.py delete mode 100644 netbox/virtualization/migrations/0031_virtualmachine_site_device.py delete mode 100644 netbox/virtualization/migrations/0032_virtualmachine_update_sites.py delete mode 100644 netbox/virtualization/migrations/0033_unique_constraints.py delete mode 100644 netbox/virtualization/migrations/0034_standardize_description_comments.py delete mode 100644 netbox/virtualization/migrations/0035_virtualmachine_interface_count.py delete mode 100644 netbox/virtualization/migrations/0036_virtualmachine_config_template.py rename netbox/wireless/migrations/{0001_wireless.py => 0001_squashed_0008.py} (56%) delete mode 100644 netbox/wireless/migrations/0002_standardize_id_fields.py delete mode 100644 netbox/wireless/migrations/0003_created_datetimefield.py delete mode 100644 netbox/wireless/migrations/0004_wireless_tenancy.py delete mode 100644 netbox/wireless/migrations/0005_wirelesslink_interface_types.py delete mode 100644 netbox/wireless/migrations/0006_unique_constraints.py delete mode 100644 netbox/wireless/migrations/0007_standardize_description_comments.py delete mode 100644 netbox/wireless/migrations/0008_wirelesslan_status.py diff --git a/netbox/circuits/migrations/0003_extend_tag_support.py b/netbox/circuits/migrations/0003_extend_tag_support.py deleted file mode 100644 index e5e6ee262..000000000 --- a/netbox/circuits/migrations/0003_extend_tag_support.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.8 on 2021-10-21 14:50 - -from django.db import migrations -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0062_clear_secrets_changelog'), - ('circuits', '0002_squashed_0029'), - ] - - operations = [ - migrations.AddField( - model_name='circuittype', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - ] diff --git a/netbox/circuits/migrations/0003_squashed_0037.py b/netbox/circuits/migrations/0003_squashed_0037.py new file mode 100644 index 000000000..69c3e1c68 --- /dev/null +++ b/netbox/circuits/migrations/0003_squashed_0037.py @@ -0,0 +1,127 @@ +import taggit.managers +from django.db import migrations, models + +import utilities.json + + +class Migration(migrations.Migration): + + replaces = [ + ('circuits', '0003_extend_tag_support'), + ('circuits', '0004_rename_cable_peer'), + ('circuits', '0032_provider_service_id'), + ('circuits', '0033_standardize_id_fields'), + ('circuits', '0034_created_datetimefield'), + ('circuits', '0035_provider_asns'), + ('circuits', '0036_circuit_termination_date_tags_custom_fields'), + ('circuits', '0037_new_cabling_models') + ] + + dependencies = [ + ('ipam', '0047_squashed_0053'), + ('extras', '0002_squashed_0059'), + ('circuits', '0002_squashed_0029'), + ] + + operations = [ + migrations.AddField( + model_name='circuittype', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.RenameField( + model_name='circuittermination', + old_name='_cable_peer_id', + new_name='_link_peer_id', + ), + migrations.RenameField( + model_name='circuittermination', + old_name='_cable_peer_type', + new_name='_link_peer_type', + ), + migrations.AddField( + model_name='providernetwork', + name='service_id', + field=models.CharField(blank=True, max_length=100), + ), + migrations.AlterField( + model_name='circuit', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='circuittermination', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='circuittype', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='provider', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='providernetwork', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='circuittermination', + name='_link_peer_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='circuit', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='circuittermination', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='circuittype', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='provider', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='providernetwork', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name='provider', + name='asns', + field=models.ManyToManyField(blank=True, related_name='providers', to='ipam.asn'), + ), + migrations.AddField( + model_name='circuit', + name='termination_date', + field=models.DateField(blank=True, null=True), + ), + migrations.AddField( + model_name='circuittermination', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), + migrations.AddField( + model_name='circuittermination', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='circuittermination', + name='cable_end', + field=models.CharField(blank=True, max_length=1), + ), + ] diff --git a/netbox/circuits/migrations/0004_rename_cable_peer.py b/netbox/circuits/migrations/0004_rename_cable_peer.py deleted file mode 100644 index 81d507eb4..000000000 --- a/netbox/circuits/migrations/0004_rename_cable_peer.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0003_extend_tag_support'), - ] - - operations = [ - migrations.RenameField( - model_name='circuittermination', - old_name='_cable_peer_id', - new_name='_link_peer_id', - ), - migrations.RenameField( - model_name='circuittermination', - old_name='_cable_peer_type', - new_name='_link_peer_type', - ), - ] diff --git a/netbox/circuits/migrations/0032_provider_service_id.py b/netbox/circuits/migrations/0032_provider_service_id.py deleted file mode 100644 index 58936d1bd..000000000 --- a/netbox/circuits/migrations/0032_provider_service_id.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0004_rename_cable_peer'), - ('dcim', '0145_site_remove_deprecated_fields'), - ] - - operations = [ - migrations.AddField( - model_name='providernetwork', - name='service_id', - field=models.CharField(blank=True, max_length=100), - ), - ] diff --git a/netbox/circuits/migrations/0033_standardize_id_fields.py b/netbox/circuits/migrations/0033_standardize_id_fields.py deleted file mode 100644 index 475fc2527..000000000 --- a/netbox/circuits/migrations/0033_standardize_id_fields.py +++ /dev/null @@ -1,44 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0032_provider_service_id'), - ] - - operations = [ - # Model IDs - migrations.AlterField( - model_name='circuit', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='circuittermination', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='circuittype', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='provider', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='providernetwork', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - - # GFK IDs - migrations.AlterField( - model_name='circuittermination', - name='_link_peer_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - ] diff --git a/netbox/circuits/migrations/0034_created_datetimefield.py b/netbox/circuits/migrations/0034_created_datetimefield.py deleted file mode 100644 index 4af78c1a2..000000000 --- a/netbox/circuits/migrations/0034_created_datetimefield.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 4.0.2 on 2022-02-08 18:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0033_standardize_id_fields'), - ] - - operations = [ - migrations.AlterField( - model_name='circuit', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='circuittermination', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='circuittype', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='provider', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='providernetwork', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - ] diff --git a/netbox/circuits/migrations/0035_provider_asns.py b/netbox/circuits/migrations/0035_provider_asns.py deleted file mode 100644 index afb0da4d6..000000000 --- a/netbox/circuits/migrations/0035_provider_asns.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.0.3 on 2022-03-30 20:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0057_created_datetimefield'), - ('circuits', '0034_created_datetimefield'), - ] - - operations = [ - migrations.AddField( - model_name='provider', - name='asns', - field=models.ManyToManyField(blank=True, related_name='providers', to='ipam.asn'), - ), - ] diff --git a/netbox/circuits/migrations/0036_circuit_termination_date_tags_custom_fields.py b/netbox/circuits/migrations/0036_circuit_termination_date_tags_custom_fields.py deleted file mode 100644 index 96b2a9d97..000000000 --- a/netbox/circuits/migrations/0036_circuit_termination_date_tags_custom_fields.py +++ /dev/null @@ -1,28 +0,0 @@ -from utilities.json import CustomFieldJSONEncoder -from django.db import migrations, models -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0035_provider_asns'), - ] - - operations = [ - migrations.AddField( - model_name='circuit', - name='termination_date', - field=models.DateField(blank=True, null=True), - ), - migrations.AddField( - model_name='circuittermination', - name='custom_field_data', - field=models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder), - ), - migrations.AddField( - model_name='circuittermination', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - ] diff --git a/netbox/circuits/migrations/0037_new_cabling_models.py b/netbox/circuits/migrations/0037_new_cabling_models.py deleted file mode 100644 index ee08147f3..000000000 --- a/netbox/circuits/migrations/0037_new_cabling_models.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0036_circuit_termination_date_tags_custom_fields'), - ] - - operations = [ - migrations.AddField( - model_name='circuittermination', - name='cable_end', - field=models.CharField(blank=True, max_length=1), - ), - ] diff --git a/netbox/circuits/migrations/0038_cabling_cleanup.py b/netbox/circuits/migrations/0038_cabling_cleanup.py deleted file mode 100644 index 0672057e3..000000000 --- a/netbox/circuits/migrations/0038_cabling_cleanup.py +++ /dev/null @@ -1,20 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0037_new_cabling_models'), - ('dcim', '0160_populate_cable_ends'), - ] - - operations = [ - migrations.RemoveField( - model_name='circuittermination', - name='_link_peer_id', - ), - migrations.RemoveField( - model_name='circuittermination', - name='_link_peer_type', - ), - ] diff --git a/netbox/circuits/migrations/0042_provideraccount.py b/netbox/circuits/migrations/0038_squashed_0042.py similarity index 50% rename from netbox/circuits/migrations/0042_provideraccount.py rename to netbox/circuits/migrations/0038_squashed_0042.py index 3e583844e..f57fde3db 100644 --- a/netbox/circuits/migrations/0042_provideraccount.py +++ b/netbox/circuits/migrations/0038_squashed_0042.py @@ -1,46 +1,83 @@ -from django.db import migrations, models import django.db.models.deletion import taggit.managers +from django.db import migrations, models + import utilities.json -def create_provideraccounts_from_providers(apps, schema_editor): - """ - Migrate Account in Provider model to separate account model - """ - Provider = apps.get_model('circuits', 'Provider') - ProviderAccount = apps.get_model('circuits', 'ProviderAccount') - - provider_accounts = [] - for provider in Provider.objects.all(): - if provider.account: - provider_accounts.append(ProviderAccount( - provider=provider, - account=provider.account - )) - ProviderAccount.objects.bulk_create(provider_accounts, batch_size=100) - - -def restore_providers_from_provideraccounts(apps, schema_editor): - """ - Restore Provider account values from auto-generated ProviderAccounts - """ - ProviderAccount = apps.get_model('circuits', 'ProviderAccount') - provider_accounts = ProviderAccount.objects.order_by('pk') - for provideraccount in provider_accounts: - if provider_accounts.filter(provider=provideraccount.provider)[0] == provideraccount: - provideraccount.provider.account = provideraccount.account - provideraccount.provider.save() - - class Migration(migrations.Migration): - dependencies = [ - ('extras', '0084_staging'), + replaces = [ + ('circuits', '0038_cabling_cleanup'), + ('circuits', '0039_unique_constraints'), + ('circuits', '0040_provider_remove_deprecated_fields'), ('circuits', '0041_standardize_description_comments'), + ('circuits', '0042_provideraccount') + ] + + dependencies = [ + ('circuits', '0037_new_cabling_models'), + ('dcim', '0160_populate_cable_ends'), ] operations = [ + migrations.RemoveField( + model_name='circuittermination', + name='_link_peer_id', + ), + migrations.RemoveField( + model_name='circuittermination', + name='_link_peer_type', + ), + migrations.RemoveConstraint( + model_name='providernetwork', + name='circuits_providernetwork_provider_name', + ), + migrations.AlterUniqueTogether( + name='circuit', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='circuittermination', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='providernetwork', + unique_together=set(), + ), + migrations.AddConstraint( + model_name='circuit', + constraint=models.UniqueConstraint(fields=('provider', 'cid'), name='circuits_circuit_unique_provider_cid'), + ), + migrations.AddConstraint( + model_name='circuittermination', + constraint=models.UniqueConstraint(fields=('circuit', 'term_side'), name='circuits_circuittermination_unique_circuit_term_side'), + ), + migrations.AddConstraint( + model_name='providernetwork', + constraint=models.UniqueConstraint(fields=('provider', 'name'), name='circuits_providernetwork_unique_provider_name'), + ), + migrations.RemoveField( + model_name='provider', + name='admin_contact', + ), + migrations.RemoveField( + model_name='provider', + name='asn', + ), + migrations.RemoveField( + model_name='provider', + name='noc_contact', + ), + migrations.RemoveField( + model_name='provider', + name='portal_url', + ), + migrations.AddField( + model_name='provider', + name='description', + field=models.CharField(blank=True, max_length=200), + ), migrations.CreateModel( name='ProviderAccount', fields=[ @@ -67,9 +104,6 @@ class Migration(migrations.Migration): model_name='provideraccount', constraint=models.UniqueConstraint(fields=('provider', 'account'), name='circuits_provideraccount_unique_provider_account'), ), - migrations.RunPython( - create_provideraccounts_from_providers, restore_providers_from_provideraccounts - ), migrations.RemoveField( model_name='provider', name='account', @@ -77,7 +111,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='circuit', name='provider_account', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='circuits', to='circuits.provideraccount', null=True, blank=True), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='circuits', to='circuits.provideraccount'), preserve_default=False, ), migrations.AlterModelOptions( diff --git a/netbox/circuits/migrations/0039_unique_constraints.py b/netbox/circuits/migrations/0039_unique_constraints.py deleted file mode 100644 index 1d5b62499..000000000 --- a/netbox/circuits/migrations/0039_unique_constraints.py +++ /dev/null @@ -1,39 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0038_cabling_cleanup'), - ] - - operations = [ - migrations.RemoveConstraint( - model_name='providernetwork', - name='circuits_providernetwork_provider_name', - ), - migrations.AlterUniqueTogether( - name='circuit', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='circuittermination', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='providernetwork', - unique_together=set(), - ), - migrations.AddConstraint( - model_name='circuit', - constraint=models.UniqueConstraint(fields=('provider', 'cid'), name='circuits_circuit_unique_provider_cid'), - ), - migrations.AddConstraint( - model_name='circuittermination', - constraint=models.UniqueConstraint(fields=('circuit', 'term_side'), name='circuits_circuittermination_unique_circuit_term_side'), - ), - migrations.AddConstraint( - model_name='providernetwork', - constraint=models.UniqueConstraint(fields=('provider', 'name'), name='circuits_providernetwork_unique_provider_name'), - ), - ] diff --git a/netbox/circuits/migrations/0040_provider_remove_deprecated_fields.py b/netbox/circuits/migrations/0040_provider_remove_deprecated_fields.py deleted file mode 100644 index 98c82204d..000000000 --- a/netbox/circuits/migrations/0040_provider_remove_deprecated_fields.py +++ /dev/null @@ -1,59 +0,0 @@ -import os - -from django.db import migrations -from django.db.utils import DataError - - -def check_legacy_data(apps, schema_editor): - """ - Abort the migration if any legacy provider fields still contain data. - """ - Provider = apps.get_model('circuits', 'Provider') - - provider_count = Provider.objects.exclude(asn__isnull=True).count() - if provider_count and 'NETBOX_DELETE_LEGACY_DATA' not in os.environ: - raise DataError( - f"Unable to proceed with deleting asn field from Provider model: Found {provider_count} " - f"providers with legacy ASN data. Please ensure all legacy provider ASN data has been " - f"migrated to ASN objects before proceeding. Or, set the NETBOX_DELETE_LEGACY_DATA " - f"environment variable to bypass this safeguard and delete all legacy provider ASN data." - ) - - provider_count = Provider.objects.exclude(admin_contact='', noc_contact='', portal_url='').count() - if provider_count and 'NETBOX_DELETE_LEGACY_DATA' not in os.environ: - raise DataError( - f"Unable to proceed with deleting contact fields from Provider model: Found {provider_count} " - f"providers with legacy contact data. Please ensure all legacy provider contact data has been " - f"migrated to contact objects before proceeding. Or, set the NETBOX_DELETE_LEGACY_DATA " - f"environment variable to bypass this safeguard and delete all legacy provider contact data." - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0039_unique_constraints'), - ] - - operations = [ - migrations.RunPython( - code=check_legacy_data, - reverse_code=migrations.RunPython.noop - ), - migrations.RemoveField( - model_name='provider', - name='admin_contact', - ), - migrations.RemoveField( - model_name='provider', - name='asn', - ), - migrations.RemoveField( - model_name='provider', - name='noc_contact', - ), - migrations.RemoveField( - model_name='provider', - name='portal_url', - ), - ] diff --git a/netbox/circuits/migrations/0041_standardize_description_comments.py b/netbox/circuits/migrations/0041_standardize_description_comments.py deleted file mode 100644 index 49cdefcba..000000000 --- a/netbox/circuits/migrations/0041_standardize_description_comments.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.2 on 2022-11-03 18:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0040_provider_remove_deprecated_fields'), - ] - - operations = [ - migrations.AddField( - model_name='provider', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - ] diff --git a/netbox/core/migrations/0001_initial.py b/netbox/core/migrations/0001_squashed_0005.py similarity index 51% rename from netbox/core/migrations/0001_initial.py rename to netbox/core/migrations/0001_squashed_0005.py index 775a5dcb1..971370bf2 100644 --- a/netbox/core/migrations/0001_initial.py +++ b/netbox/core/migrations/0001_squashed_0005.py @@ -1,18 +1,26 @@ -# Generated by Django 4.1.5 on 2023-02-02 02:37 - import django.core.validators -from django.db import migrations, models import django.db.models.deletion import taggit.managers +from django.conf import settings +from django.db import migrations, models + import utilities.json class Migration(migrations.Migration): - initial = True + replaces = [ + ('core', '0001_initial'), + ('core', '0002_managedfile'), + ('core', '0003_job'), + ('core', '0004_replicate_jobresults'), + ('core', '0005_job_created_auto_now') + ] dependencies = [ - ('extras', '0084_staging'), + ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('extras', '0002_squashed_0059'), ] operations = [ @@ -71,13 +79,61 @@ class Migration(migrations.Migration): ('datafile', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='core.datafile')), ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype')), ], - ), - migrations.AddIndex( - model_name='autosyncrecord', - index=models.Index(fields=['object_type', 'object_id'], name='core_autosy_object__c17bac_idx'), + options={ + 'indexes': [models.Index(fields=['object_type', 'object_id'], name='core_autosy_object__c17bac_idx')], + }, ), migrations.AddConstraint( model_name='autosyncrecord', constraint=models.UniqueConstraint(fields=('object_type', 'object_id'), name='core_autosyncrecord_object'), ), + migrations.CreateModel( + name='ManagedFile', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('data_path', models.CharField(blank=True, editable=False, max_length=1000)), + ('data_synced', models.DateTimeField(blank=True, editable=False, null=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ('last_updated', models.DateTimeField(blank=True, editable=False, null=True)), + ('file_root', models.CharField(max_length=1000)), + ('file_path', models.FilePathField(editable=False)), + ('data_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile')), + ('data_source', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource')), + ('auto_sync_enabled', models.BooleanField(default=False)), + ], + options={ + 'ordering': ('file_root', 'file_path'), + 'indexes': [models.Index(fields=['file_root', 'file_path'], name='core_managedfile_root_path')], + }, + ), + migrations.AddConstraint( + model_name='managedfile', + constraint=models.UniqueConstraint(fields=('file_root', 'file_path'), name='core_managedfile_unique_root_path'), + ), + migrations.CreateModel( + name='Job', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('object_id', models.PositiveBigIntegerField(blank=True, null=True)), + ('name', models.CharField(max_length=200)), + ('created', models.DateTimeField()), + ('scheduled', models.DateTimeField(blank=True, null=True)), + ('interval', models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)])), + ('started', models.DateTimeField(blank=True, null=True)), + ('completed', models.DateTimeField(blank=True, null=True)), + ('status', models.CharField(default='pending', max_length=30)), + ('data', models.JSONField(blank=True, null=True)), + ('job_id', models.UUIDField(unique=True)), + ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='jobs', to='contenttypes.contenttype')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ['-created'], + }, + ), + migrations.AlterField( + model_name='job', + name='created', + field=models.DateTimeField(auto_now_add=True), + ), ] diff --git a/netbox/core/migrations/0002_managedfile.py b/netbox/core/migrations/0002_managedfile.py deleted file mode 100644 index 169063be8..000000000 --- a/netbox/core/migrations/0002_managedfile.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 4.1.7 on 2023-03-23 17:35 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='ManagedFile', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('data_path', models.CharField(blank=True, editable=False, max_length=1000)), - ('data_synced', models.DateTimeField(blank=True, editable=False, null=True)), - ('created', models.DateTimeField(auto_now_add=True)), - ('last_updated', models.DateTimeField(blank=True, editable=False, null=True)), - ('file_root', models.CharField(max_length=1000)), - ('file_path', models.FilePathField(editable=False)), - ('data_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile')), - ('data_source', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource')), - ('auto_sync_enabled', models.BooleanField(default=False)), - ], - options={ - 'ordering': ('file_root', 'file_path'), - }, - ), - migrations.AddIndex( - model_name='managedfile', - index=models.Index(fields=['file_root', 'file_path'], name='core_managedfile_root_path'), - ), - migrations.AddConstraint( - model_name='managedfile', - constraint=models.UniqueConstraint(fields=('file_root', 'file_path'), name='core_managedfile_unique_root_path'), - ), - ] diff --git a/netbox/core/migrations/0003_job.py b/netbox/core/migrations/0003_job.py deleted file mode 100644 index f2fe41afb..000000000 --- a/netbox/core/migrations/0003_job.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 4.1.7 on 2023-03-27 15:02 - -from django.conf import settings -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('core', '0002_managedfile'), - ] - - operations = [ - migrations.CreateModel( - name='Job', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('object_id', models.PositiveBigIntegerField(blank=True, null=True)), - ('name', models.CharField(max_length=200)), - ('created', models.DateTimeField()), - ('scheduled', models.DateTimeField(blank=True, null=True)), - ('interval', models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)])), - ('started', models.DateTimeField(blank=True, null=True)), - ('completed', models.DateTimeField(blank=True, null=True)), - ('status', models.CharField(default='pending', max_length=30)), - ('data', models.JSONField(blank=True, null=True)), - ('job_id', models.UUIDField(unique=True)), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='jobs', to='contenttypes.contenttype')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ['-created'], - }, - ), - ] diff --git a/netbox/core/migrations/0004_replicate_jobresults.py b/netbox/core/migrations/0004_replicate_jobresults.py deleted file mode 100644 index 881506b9b..000000000 --- a/netbox/core/migrations/0004_replicate_jobresults.py +++ /dev/null @@ -1,46 +0,0 @@ -from django.db import migrations - - -def replicate_jobresults(apps, schema_editor): - """ - Replicate existing JobResults to the new Jobs table before deleting the old JobResults table. - """ - Job = apps.get_model('core', 'Job') - JobResult = apps.get_model('extras', 'JobResult') - - jobs = [] - for job_result in JobResult.objects.order_by('pk').iterator(chunk_size=100): - jobs.append( - Job( - object_type=job_result.obj_type, - name=job_result.name, - created=job_result.created, - scheduled=job_result.scheduled, - interval=job_result.interval, - started=job_result.started, - completed=job_result.completed, - user=job_result.user, - status=job_result.status, - data=job_result.data, - job_id=job_result.job_id, - ) - ) - if len(jobs) == 100: - Job.objects.bulk_create(jobs) - jobs = [] - if jobs: - Job.objects.bulk_create(jobs) - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0003_job'), - ] - - operations = [ - migrations.RunPython( - code=replicate_jobresults, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/core/migrations/0005_job_created_auto_now.py b/netbox/core/migrations/0005_job_created_auto_now.py deleted file mode 100644 index 12fd526ef..000000000 --- a/netbox/core/migrations/0005_job_created_auto_now.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.7 on 2023-03-27 17:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0004_replicate_jobresults'), - ] - - operations = [ - migrations.AlterField( - model_name='job', - name='created', - field=models.DateTimeField(auto_now_add=True), - ), - ] diff --git a/netbox/dcim/migrations/0131_consoleport_speed.py b/netbox/dcim/migrations/0131_consoleport_speed.py deleted file mode 100644 index 350162218..000000000 --- a/netbox/dcim/migrations/0131_consoleport_speed.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0130_sitegroup'), - ] - - operations = [ - migrations.AlterField( - model_name='consoleport', - name='speed', - field=models.PositiveIntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='consoleserverport', - name='speed', - field=models.PositiveIntegerField(blank=True, null=True), - ), - ] diff --git a/netbox/dcim/migrations/0131_squashed_0159.py b/netbox/dcim/migrations/0131_squashed_0159.py new file mode 100644 index 000000000..f7e7cfdb2 --- /dev/null +++ b/netbox/dcim/migrations/0131_squashed_0159.py @@ -0,0 +1,1194 @@ +import dcim.fields +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import mptt.fields +import taggit.managers +import utilities.fields +import utilities.json +import utilities.ordering + + +class Migration(migrations.Migration): + + replaces = [ + ('dcim', '0131_consoleport_speed'), + ('dcim', '0132_cable_length'), + ('dcim', '0133_port_colors'), + ('dcim', '0134_interface_wwn_bridge'), + ('dcim', '0135_tenancy_extensions'), + ('dcim', '0136_device_airflow'), + ('dcim', '0137_relax_uniqueness_constraints'), + ('dcim', '0138_extend_tag_support'), + ('dcim', '0139_rename_cable_peer'), + ('dcim', '0140_wireless'), + ('dcim', '0141_asn_model'), + ('dcim', '0142_rename_128gfc_qsfp28'), + ('dcim', '0143_remove_primary_for_related_name'), + ('dcim', '0144_fix_cable_abs_length'), + ('dcim', '0145_site_remove_deprecated_fields'), + ('dcim', '0146_modules'), + ('dcim', '0147_inventoryitemrole'), + ('dcim', '0148_inventoryitem_component'), + ('dcim', '0149_inventoryitem_templates'), + ('dcim', '0150_interface_vrf'), + ('dcim', '0151_interface_speed_duplex'), + ('dcim', '0152_standardize_id_fields'), + ('dcim', '0153_created_datetimefield'), + ('dcim', '0154_half_height_rack_units'), + ('dcim', '0155_interface_poe_mode_type'), + ('dcim', '0156_location_status'), + ('dcim', '0157_new_cabling_models'), + ('dcim', '0158_populate_cable_terminations'), + ('dcim', '0159_populate_cable_paths') + ] + + dependencies = [ + ('tenancy', '0012_standardize_models'), + ('extras', '0002_squashed_0059'), + ('dcim', '0130_sitegroup'), + ('contenttypes', '0002_remove_content_type_name'), + ('ipam', '0053_asn_model'), + ('wireless', '0001_wireless'), + ] + + operations = [ + migrations.AlterField( + model_name='consoleport', + name='speed', + field=models.PositiveIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='consoleserverport', + name='speed', + field=models.PositiveIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='cable', + name='length', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), + ), + migrations.AddField( + model_name='frontport', + name='color', + field=utilities.fields.ColorField(blank=True, max_length=6), + ), + migrations.AddField( + model_name='frontporttemplate', + name='color', + field=utilities.fields.ColorField(blank=True, max_length=6), + ), + migrations.AddField( + model_name='rearport', + name='color', + field=utilities.fields.ColorField(blank=True, max_length=6), + ), + migrations.AddField( + model_name='rearporttemplate', + name='color', + field=utilities.fields.ColorField(blank=True, max_length=6), + ), + migrations.AddField( + model_name='interface', + name='wwn', + field=dcim.fields.WWNField(blank=True, null=True), + ), + migrations.AddField( + model_name='interface', + name='bridge', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bridge_interfaces', to='dcim.interface'), + ), + migrations.AddField( + model_name='location', + name='tenant', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='locations', to='tenancy.tenant'), + ), + migrations.AddField( + model_name='cable', + name='tenant', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='cables', to='tenancy.tenant'), + ), + migrations.AddField( + model_name='devicetype', + name='airflow', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='device', + name='airflow', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AlterField( + model_name='region', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='region', + name='slug', + field=models.SlugField(max_length=100), + ), + migrations.AlterField( + model_name='sitegroup', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='sitegroup', + name='slug', + field=models.SlugField(max_length=100), + ), + migrations.AlterUniqueTogether( + name='location', + unique_together=set(), + ), + migrations.AddConstraint( + model_name='location', + constraint=models.UniqueConstraint(fields=('site', 'parent', 'name'), name='dcim_location_parent_name'), + ), + migrations.AddConstraint( + model_name='location', + constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('site', 'name'), name='dcim_location_name'), + ), + migrations.AddConstraint( + model_name='location', + constraint=models.UniqueConstraint(fields=('site', 'parent', 'slug'), name='dcim_location_parent_slug'), + ), + migrations.AddConstraint( + model_name='location', + constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('site', 'slug'), name='dcim_location_slug'), + ), + migrations.AddConstraint( + model_name='region', + constraint=models.UniqueConstraint(fields=('parent', 'name'), name='dcim_region_parent_name'), + ), + migrations.AddConstraint( + model_name='region', + constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('name',), name='dcim_region_name'), + ), + migrations.AddConstraint( + model_name='region', + constraint=models.UniqueConstraint(fields=('parent', 'slug'), name='dcim_region_parent_slug'), + ), + migrations.AddConstraint( + model_name='region', + constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('slug',), name='dcim_region_slug'), + ), + migrations.AddConstraint( + model_name='sitegroup', + constraint=models.UniqueConstraint(fields=('parent', 'name'), name='dcim_sitegroup_parent_name'), + ), + migrations.AddConstraint( + model_name='sitegroup', + constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('name',), name='dcim_sitegroup_name'), + ), + migrations.AddConstraint( + model_name='sitegroup', + constraint=models.UniqueConstraint(fields=('parent', 'slug'), name='dcim_sitegroup_parent_slug'), + ), + migrations.AddConstraint( + model_name='sitegroup', + constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('slug',), name='dcim_sitegroup_slug'), + ), + migrations.AddField( + model_name='devicerole', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='location', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='manufacturer', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='platform', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='rackrole', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='region', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='sitegroup', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.RenameField( + model_name='consoleport', + old_name='_cable_peer_id', + new_name='_link_peer_id', + ), + migrations.RenameField( + model_name='consoleport', + old_name='_cable_peer_type', + new_name='_link_peer_type', + ), + migrations.RenameField( + model_name='consoleserverport', + old_name='_cable_peer_id', + new_name='_link_peer_id', + ), + migrations.RenameField( + model_name='consoleserverport', + old_name='_cable_peer_type', + new_name='_link_peer_type', + ), + migrations.RenameField( + model_name='frontport', + old_name='_cable_peer_id', + new_name='_link_peer_id', + ), + migrations.RenameField( + model_name='frontport', + old_name='_cable_peer_type', + new_name='_link_peer_type', + ), + migrations.RenameField( + model_name='interface', + old_name='_cable_peer_id', + new_name='_link_peer_id', + ), + migrations.RenameField( + model_name='interface', + old_name='_cable_peer_type', + new_name='_link_peer_type', + ), + migrations.RenameField( + model_name='powerfeed', + old_name='_cable_peer_id', + new_name='_link_peer_id', + ), + migrations.RenameField( + model_name='powerfeed', + old_name='_cable_peer_type', + new_name='_link_peer_type', + ), + migrations.RenameField( + model_name='poweroutlet', + old_name='_cable_peer_id', + new_name='_link_peer_id', + ), + migrations.RenameField( + model_name='poweroutlet', + old_name='_cable_peer_type', + new_name='_link_peer_type', + ), + migrations.RenameField( + model_name='powerport', + old_name='_cable_peer_id', + new_name='_link_peer_id', + ), + migrations.RenameField( + model_name='powerport', + old_name='_cable_peer_type', + new_name='_link_peer_type', + ), + migrations.RenameField( + model_name='rearport', + old_name='_cable_peer_id', + new_name='_link_peer_id', + ), + migrations.RenameField( + model_name='rearport', + old_name='_cable_peer_type', + new_name='_link_peer_type', + ), + migrations.AddField( + model_name='interface', + name='rf_role', + field=models.CharField(blank=True, max_length=30), + ), + migrations.AddField( + model_name='interface', + name='rf_channel', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='interface', + name='rf_channel_frequency', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True), + ), + migrations.AddField( + model_name='interface', + name='rf_channel_width', + field=models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True), + ), + migrations.AddField( + model_name='interface', + name='tx_power', + field=models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MaxValueValidator(127)]), + ), + migrations.AddField( + model_name='interface', + name='wireless_lans', + field=models.ManyToManyField(blank=True, related_name='interfaces', to='wireless.wirelesslan'), + ), + migrations.AddField( + model_name='interface', + name='wireless_link', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wireless.wirelesslink'), + ), + migrations.AddField( + model_name='site', + name='asns', + field=models.ManyToManyField(blank=True, related_name='sites', to='ipam.asn'), + ), + migrations.AlterField( + model_name='device', + name='primary_ip4', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress'), + ), + migrations.AlterField( + model_name='device', + name='primary_ip6', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress'), + ), + migrations.RemoveField( + model_name='site', + name='asn', + ), + migrations.RemoveField( + model_name='site', + name='contact_email', + ), + migrations.RemoveField( + model_name='site', + name='contact_name', + ), + migrations.RemoveField( + model_name='site', + name='contact_phone', + ), + migrations.RunSQL( + sql="\n DO $$\n DECLARE\n idx record;\n BEGIN\n FOR idx IN\n SELECT indexname AS old_name,\n replace(indexname, 'module', 'inventoryitem') AS new_name\n FROM pg_indexes\n WHERE schemaname = 'public' AND\n tablename = 'dcim_inventoryitem' AND\n indexname LIKE 'dcim_module_%'\n LOOP\n EXECUTE format(\n 'ALTER INDEX %I RENAME TO %I;',\n idx.old_name,\n idx.new_name\n );\n END LOOP;\n END$$;\n ", + ), + migrations.AlterModelOptions( + name='consoleporttemplate', + options={'ordering': ('device_type', 'module_type', '_name')}, + ), + migrations.AlterModelOptions( + name='consoleserverporttemplate', + options={'ordering': ('device_type', 'module_type', '_name')}, + ), + migrations.AlterModelOptions( + name='frontporttemplate', + options={'ordering': ('device_type', 'module_type', '_name')}, + ), + migrations.AlterModelOptions( + name='interfacetemplate', + options={'ordering': ('device_type', 'module_type', '_name')}, + ), + migrations.AlterModelOptions( + name='poweroutlettemplate', + options={'ordering': ('device_type', 'module_type', '_name')}, + ), + migrations.AlterModelOptions( + name='powerporttemplate', + options={'ordering': ('device_type', 'module_type', '_name')}, + ), + migrations.AlterModelOptions( + name='rearporttemplate', + options={'ordering': ('device_type', 'module_type', '_name')}, + ), + migrations.AlterField( + model_name='consoleporttemplate', + name='device_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + ), + migrations.AlterField( + model_name='consoleserverporttemplate', + name='device_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + ), + migrations.AlterField( + model_name='frontporttemplate', + name='device_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + ), + migrations.AlterField( + model_name='interfacetemplate', + name='device_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + ), + migrations.AlterField( + model_name='poweroutlettemplate', + name='device_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + ), + migrations.AlterField( + model_name='powerporttemplate', + name='device_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + ), + migrations.AlterField( + model_name='rearporttemplate', + name='device_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + ), + migrations.CreateModel( + name='ModuleType', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('model', models.CharField(max_length=100)), + ('part_number', models.CharField(blank=True, max_length=50)), + ('comments', models.TextField(blank=True)), + ('manufacturer', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='module_types', to='dcim.manufacturer')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'ordering': ('manufacturer', 'model'), + 'unique_together': {('manufacturer', 'model')}, + }, + ), + migrations.CreateModel( + name='ModuleBay', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=64)), + ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ('label', models.CharField(blank=True, max_length=64)), + ('position', models.CharField(blank=True, max_length=30)), + ('description', models.CharField(blank=True, max_length=200)), + ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'ordering': ('device', '_name'), + 'unique_together': {('device', 'name')}, + }, + ), + migrations.CreateModel( + name='Module', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('local_context_data', models.JSONField(blank=True, null=True)), + ('serial', models.CharField(blank=True, max_length=50)), + ('asset_tag', models.CharField(blank=True, max_length=50, null=True, unique=True)), + ('comments', models.TextField(blank=True)), + ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='modules', to='dcim.device')), + ('module_bay', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='installed_module', to='dcim.modulebay')), + ('module_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='instances', to='dcim.moduletype')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'ordering': ('module_bay',), + }, + ), + migrations.AddField( + model_name='consoleport', + name='module', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + ), + migrations.AddField( + model_name='consoleporttemplate', + name='module_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + ), + migrations.AddField( + model_name='consoleserverport', + name='module', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + ), + migrations.AddField( + model_name='consoleserverporttemplate', + name='module_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + ), + migrations.AddField( + model_name='frontport', + name='module', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + ), + migrations.AddField( + model_name='frontporttemplate', + name='module_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + ), + migrations.AddField( + model_name='interface', + name='module', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + ), + migrations.AddField( + model_name='interfacetemplate', + name='module_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + ), + migrations.AddField( + model_name='poweroutlet', + name='module', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + ), + migrations.AddField( + model_name='poweroutlettemplate', + name='module_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + ), + migrations.AddField( + model_name='powerport', + name='module', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + ), + migrations.AddField( + model_name='powerporttemplate', + name='module_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + ), + migrations.AddField( + model_name='rearport', + name='module', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + ), + migrations.AddField( + model_name='rearporttemplate', + name='module_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + ), + migrations.AlterUniqueTogether( + name='consoleporttemplate', + unique_together={('device_type', 'name'), ('module_type', 'name')}, + ), + migrations.AlterUniqueTogether( + name='consoleserverporttemplate', + unique_together={('device_type', 'name'), ('module_type', 'name')}, + ), + migrations.AlterUniqueTogether( + name='frontporttemplate', + unique_together={('rear_port', 'rear_port_position'), ('device_type', 'name'), ('module_type', 'name')}, + ), + migrations.AlterUniqueTogether( + name='interfacetemplate', + unique_together={('device_type', 'name'), ('module_type', 'name')}, + ), + migrations.AlterUniqueTogether( + name='poweroutlettemplate', + unique_together={('device_type', 'name'), ('module_type', 'name')}, + ), + migrations.AlterUniqueTogether( + name='powerporttemplate', + unique_together={('device_type', 'name'), ('module_type', 'name')}, + ), + migrations.AlterUniqueTogether( + name='rearporttemplate', + unique_together={('device_type', 'name'), ('module_type', 'name')}, + ), + migrations.CreateModel( + name='InventoryItemRole', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=100, unique=True)), + ('slug', models.SlugField(max_length=100, unique=True)), + ('color', utilities.fields.ColorField(default='9e9e9e', max_length=6)), + ('description', models.CharField(blank=True, max_length=200)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'ordering': ('name',), + }, + ), + migrations.AddField( + model_name='inventoryitem', + name='role', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_items', to='dcim.inventoryitemrole'), + ), + migrations.AddField( + model_name='inventoryitem', + name='component_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='inventoryitem', + name='component_type', + field=models.ForeignKey(blank=True, limit_choices_to=models.Q(('app_label', 'dcim'), ('model__in', ('consoleport', 'consoleserverport', 'frontport', 'interface', 'poweroutlet', 'powerport', 'rearport'))), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype'), + ), + migrations.AddField( + model_name='interface', + name='vrf', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='interfaces', to='ipam.vrf'), + ), + migrations.AddField( + model_name='interface', + name='duplex', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AddField( + model_name='interface', + name='speed', + field=models.PositiveIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='cable', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='cablepath', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='consoleport', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='consoleporttemplate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='consoleserverport', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='consoleserverporttemplate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='device', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='devicebay', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='devicebaytemplate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='devicerole', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='devicetype', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='frontport', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='frontporttemplate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='interface', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='interfacetemplate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='inventoryitem', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='location', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='manufacturer', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='platform', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='powerfeed', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='poweroutlet', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='poweroutlettemplate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='powerpanel', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='powerport', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='powerporttemplate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='rack', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='rackreservation', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='rackrole', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='rearport', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='rearporttemplate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='region', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='site', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='sitegroup', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='virtualchassis', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='cable', + name='termination_a_id', + field=models.PositiveBigIntegerField(), + ), + migrations.AlterField( + model_name='cable', + name='termination_b_id', + field=models.PositiveBigIntegerField(), + ), + migrations.AlterField( + model_name='cablepath', + name='destination_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='cablepath', + name='origin_id', + field=models.PositiveBigIntegerField(), + ), + migrations.AlterField( + model_name='consoleport', + name='_link_peer_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='consoleserverport', + name='_link_peer_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='frontport', + name='_link_peer_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='interface', + name='_link_peer_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='powerfeed', + name='_link_peer_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='poweroutlet', + name='_link_peer_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='powerport', + name='_link_peer_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='rearport', + name='_link_peer_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='cable', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='consoleport', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='consoleporttemplate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='consoleserverport', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='consoleserverporttemplate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='device', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='devicebay', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='devicebaytemplate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='devicerole', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='devicetype', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='frontport', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='frontporttemplate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='interface', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='interfacetemplate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='inventoryitem', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.CreateModel( + name='InventoryItemTemplate', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=64)), + ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ('label', models.CharField(blank=True, max_length=64)), + ('description', models.CharField(blank=True, max_length=200)), + ('component_id', models.PositiveBigIntegerField(blank=True, null=True)), + ('part_id', models.CharField(blank=True, max_length=50)), + ('lft', models.PositiveIntegerField(editable=False)), + ('rght', models.PositiveIntegerField(editable=False)), + ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), + ('level', models.PositiveIntegerField(editable=False)), + ('component_type', models.ForeignKey(blank=True, limit_choices_to=models.Q(('app_label', 'dcim'), ('model__in', ('consoleporttemplate', 'consoleserverporttemplate', 'frontporttemplate', 'interfacetemplate', 'poweroutlettemplate', 'powerporttemplate', 'rearporttemplate'))), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), + ('device_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype')), + ('manufacturer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_item_templates', to='dcim.manufacturer')), + ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child_items', to='dcim.inventoryitemtemplate')), + ('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_item_templates', to='dcim.inventoryitemrole')), + ], + options={ + 'ordering': ('device_type__id', 'parent__id', '_name'), + 'unique_together': {('device_type', 'parent', 'name')}, + }, + ), + migrations.AlterField( + model_name='location', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='manufacturer', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.CreateModel( + name='ModuleBayTemplate', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=64)), + ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ('label', models.CharField(blank=True, max_length=64)), + ('position', models.CharField(blank=True, max_length=30)), + ('description', models.CharField(blank=True, max_length=200)), + ('device_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype')), + ], + options={ + 'ordering': ('device_type', '_name'), + 'unique_together': {('device_type', 'name')}, + }, + ), + migrations.AlterField( + model_name='platform', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='powerfeed', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='poweroutlet', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='poweroutlettemplate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='powerpanel', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='powerport', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='powerporttemplate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='rack', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='rackreservation', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='rackrole', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='rearport', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='rearporttemplate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='region', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='site', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='sitegroup', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='virtualchassis', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='devicetype', + name='u_height', + field=models.DecimalField(decimal_places=1, default=1.0, max_digits=4), + ), + migrations.AlterField( + model_name='device', + name='position', + field=models.DecimalField(blank=True, decimal_places=1, max_digits=4, null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100.5)]), + ), + migrations.AddField( + model_name='interface', + name='poe_mode', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='interface', + name='poe_type', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='interfacetemplate', + name='poe_mode', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='interfacetemplate', + name='poe_type', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='location', + name='status', + field=models.CharField(default='active', max_length=50), + ), + migrations.CreateModel( + name='CableTermination', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('cable_end', models.CharField(max_length=1)), + ('termination_id', models.PositiveBigIntegerField()), + ('cable', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='dcim.cable')), + ('termination_type', models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))), models.Q(('app_label', 'dcim'), ('model__in', ('consoleport', 'consoleserverport', 'frontport', 'interface', 'powerfeed', 'poweroutlet', 'powerport', 'rearport'))), _connector='OR')), on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), + ('_device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.device')), + ('_rack', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.rack')), + ('_location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.location')), + ('_site', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.site')), + ], + options={ + 'ordering': ('cable', 'cable_end', 'pk'), + }, + ), + migrations.AddConstraint( + model_name='cabletermination', + constraint=models.UniqueConstraint(fields=('termination_type', 'termination_id'), name='dcim_cable_termination_unique_termination'), + ), + migrations.RenameField( + model_name='cablepath', + old_name='path', + new_name='_nodes', + ), + migrations.AddField( + model_name='cablepath', + name='path', + field=models.JSONField(default=list), + ), + migrations.AddField( + model_name='cablepath', + name='is_complete', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='consoleport', + name='cable_end', + field=models.CharField(blank=True, max_length=1), + ), + migrations.AddField( + model_name='consoleserverport', + name='cable_end', + field=models.CharField(blank=True, max_length=1), + ), + migrations.AddField( + model_name='frontport', + name='cable_end', + field=models.CharField(blank=True, max_length=1), + ), + migrations.AddField( + model_name='interface', + name='cable_end', + field=models.CharField(blank=True, max_length=1), + ), + migrations.AddField( + model_name='powerfeed', + name='cable_end', + field=models.CharField(blank=True, max_length=1), + ), + migrations.AddField( + model_name='poweroutlet', + name='cable_end', + field=models.CharField(blank=True, max_length=1), + ), + migrations.AddField( + model_name='powerport', + name='cable_end', + field=models.CharField(blank=True, max_length=1), + ), + migrations.AddField( + model_name='rearport', + name='cable_end', + field=models.CharField(blank=True, max_length=1), + ), + ] diff --git a/netbox/dcim/migrations/0132_cable_length.py b/netbox/dcim/migrations/0132_cable_length.py deleted file mode 100644 index e20a8b8aa..000000000 --- a/netbox/dcim/migrations/0132_cable_length.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0131_consoleport_speed'), - ] - - operations = [ - migrations.AlterField( - model_name='cable', - name='length', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), - ), - ] diff --git a/netbox/dcim/migrations/0133_port_colors.py b/netbox/dcim/migrations/0133_port_colors.py deleted file mode 100644 index 8cae7ac8e..000000000 --- a/netbox/dcim/migrations/0133_port_colors.py +++ /dev/null @@ -1,32 +0,0 @@ -from django.db import migrations -import utilities.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0132_cable_length'), - ] - - operations = [ - migrations.AddField( - model_name='frontport', - name='color', - field=utilities.fields.ColorField(blank=True, max_length=6), - ), - migrations.AddField( - model_name='frontporttemplate', - name='color', - field=utilities.fields.ColorField(blank=True, max_length=6), - ), - migrations.AddField( - model_name='rearport', - name='color', - field=utilities.fields.ColorField(blank=True, max_length=6), - ), - migrations.AddField( - model_name='rearporttemplate', - name='color', - field=utilities.fields.ColorField(blank=True, max_length=6), - ), - ] diff --git a/netbox/dcim/migrations/0134_interface_wwn_bridge.py b/netbox/dcim/migrations/0134_interface_wwn_bridge.py deleted file mode 100644 index a900ae6be..000000000 --- a/netbox/dcim/migrations/0134_interface_wwn_bridge.py +++ /dev/null @@ -1,23 +0,0 @@ -import dcim.fields -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0133_port_colors'), - ] - - operations = [ - migrations.AddField( - model_name='interface', - name='wwn', - field=dcim.fields.WWNField(blank=True, null=True), - ), - migrations.AddField( - model_name='interface', - name='bridge', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bridge_interfaces', to='dcim.interface'), - ), - ] diff --git a/netbox/dcim/migrations/0135_tenancy_extensions.py b/netbox/dcim/migrations/0135_tenancy_extensions.py deleted file mode 100644 index 96d765eea..000000000 --- a/netbox/dcim/migrations/0135_tenancy_extensions.py +++ /dev/null @@ -1,23 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0002_tenant_ordering'), - ('dcim', '0134_interface_wwn_bridge'), - ] - - operations = [ - migrations.AddField( - model_name='location', - name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='locations', to='tenancy.tenant'), - ), - migrations.AddField( - model_name='cable', - name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='cables', to='tenancy.tenant'), - ), - ] diff --git a/netbox/dcim/migrations/0136_device_airflow.py b/netbox/dcim/migrations/0136_device_airflow.py deleted file mode 100644 index 94cc89f3f..000000000 --- a/netbox/dcim/migrations/0136_device_airflow.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0135_tenancy_extensions'), - ] - - operations = [ - migrations.AddField( - model_name='devicetype', - name='airflow', - field=models.CharField(blank=True, max_length=50), - ), - migrations.AddField( - model_name='device', - name='airflow', - field=models.CharField(blank=True, max_length=50), - ), - ] diff --git a/netbox/dcim/migrations/0137_relax_uniqueness_constraints.py b/netbox/dcim/migrations/0137_relax_uniqueness_constraints.py deleted file mode 100644 index 7cedb1b08..000000000 --- a/netbox/dcim/migrations/0137_relax_uniqueness_constraints.py +++ /dev/null @@ -1,83 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0136_device_airflow'), - ] - - operations = [ - migrations.AlterField( - model_name='region', - name='name', - field=models.CharField(max_length=100), - ), - migrations.AlterField( - model_name='region', - name='slug', - field=models.SlugField(max_length=100), - ), - migrations.AlterField( - model_name='sitegroup', - name='name', - field=models.CharField(max_length=100), - ), - migrations.AlterField( - model_name='sitegroup', - name='slug', - field=models.SlugField(max_length=100), - ), - migrations.AlterUniqueTogether( - name='location', - unique_together=set(), - ), - migrations.AddConstraint( - model_name='location', - constraint=models.UniqueConstraint(fields=('site', 'parent', 'name'), name='dcim_location_parent_name'), - ), - migrations.AddConstraint( - model_name='location', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('site', 'name'), name='dcim_location_name'), - ), - migrations.AddConstraint( - model_name='location', - constraint=models.UniqueConstraint(fields=('site', 'parent', 'slug'), name='dcim_location_parent_slug'), - ), - migrations.AddConstraint( - model_name='location', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('site', 'slug'), name='dcim_location_slug'), - ), - migrations.AddConstraint( - model_name='region', - constraint=models.UniqueConstraint(fields=('parent', 'name'), name='dcim_region_parent_name'), - ), - migrations.AddConstraint( - model_name='region', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('name',), name='dcim_region_name'), - ), - migrations.AddConstraint( - model_name='region', - constraint=models.UniqueConstraint(fields=('parent', 'slug'), name='dcim_region_parent_slug'), - ), - migrations.AddConstraint( - model_name='region', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('slug',), name='dcim_region_slug'), - ), - migrations.AddConstraint( - model_name='sitegroup', - constraint=models.UniqueConstraint(fields=('parent', 'name'), name='dcim_sitegroup_parent_name'), - ), - migrations.AddConstraint( - model_name='sitegroup', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('name',), name='dcim_sitegroup_name'), - ), - migrations.AddConstraint( - model_name='sitegroup', - constraint=models.UniqueConstraint(fields=('parent', 'slug'), name='dcim_sitegroup_parent_slug'), - ), - migrations.AddConstraint( - model_name='sitegroup', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('slug',), name='dcim_sitegroup_slug'), - ), - ] diff --git a/netbox/dcim/migrations/0138_extend_tag_support.py b/netbox/dcim/migrations/0138_extend_tag_support.py deleted file mode 100644 index 763b53c50..000000000 --- a/netbox/dcim/migrations/0138_extend_tag_support.py +++ /dev/null @@ -1,50 +0,0 @@ -# Generated by Django 3.2.8 on 2021-10-21 14:50 - -from django.db import migrations -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0062_clear_secrets_changelog'), - ('dcim', '0137_relax_uniqueness_constraints'), - ] - - operations = [ - migrations.AddField( - model_name='devicerole', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='location', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='manufacturer', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='platform', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='rackrole', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='region', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='sitegroup', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - ] diff --git a/netbox/dcim/migrations/0139_rename_cable_peer.py b/netbox/dcim/migrations/0139_rename_cable_peer.py deleted file mode 100644 index 59dc04e2a..000000000 --- a/netbox/dcim/migrations/0139_rename_cable_peer.py +++ /dev/null @@ -1,91 +0,0 @@ -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0138_extend_tag_support'), - ] - - operations = [ - migrations.RenameField( - model_name='consoleport', - old_name='_cable_peer_id', - new_name='_link_peer_id', - ), - migrations.RenameField( - model_name='consoleport', - old_name='_cable_peer_type', - new_name='_link_peer_type', - ), - migrations.RenameField( - model_name='consoleserverport', - old_name='_cable_peer_id', - new_name='_link_peer_id', - ), - migrations.RenameField( - model_name='consoleserverport', - old_name='_cable_peer_type', - new_name='_link_peer_type', - ), - migrations.RenameField( - model_name='frontport', - old_name='_cable_peer_id', - new_name='_link_peer_id', - ), - migrations.RenameField( - model_name='frontport', - old_name='_cable_peer_type', - new_name='_link_peer_type', - ), - migrations.RenameField( - model_name='interface', - old_name='_cable_peer_id', - new_name='_link_peer_id', - ), - migrations.RenameField( - model_name='interface', - old_name='_cable_peer_type', - new_name='_link_peer_type', - ), - migrations.RenameField( - model_name='powerfeed', - old_name='_cable_peer_id', - new_name='_link_peer_id', - ), - migrations.RenameField( - model_name='powerfeed', - old_name='_cable_peer_type', - new_name='_link_peer_type', - ), - migrations.RenameField( - model_name='poweroutlet', - old_name='_cable_peer_id', - new_name='_link_peer_id', - ), - migrations.RenameField( - model_name='poweroutlet', - old_name='_cable_peer_type', - new_name='_link_peer_type', - ), - migrations.RenameField( - model_name='powerport', - old_name='_cable_peer_id', - new_name='_link_peer_id', - ), - migrations.RenameField( - model_name='powerport', - old_name='_cable_peer_type', - new_name='_link_peer_type', - ), - migrations.RenameField( - model_name='rearport', - old_name='_cable_peer_id', - new_name='_link_peer_id', - ), - migrations.RenameField( - model_name='rearport', - old_name='_cable_peer_type', - new_name='_link_peer_type', - ), - ] diff --git a/netbox/dcim/migrations/0140_wireless.py b/netbox/dcim/migrations/0140_wireless.py deleted file mode 100644 index 430782cf0..000000000 --- a/netbox/dcim/migrations/0140_wireless.py +++ /dev/null @@ -1,49 +0,0 @@ -from django.db import migrations, models -import django.core.validators -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0139_rename_cable_peer'), - ('wireless', '0001_wireless'), - ] - - operations = [ - migrations.AddField( - model_name='interface', - name='rf_role', - field=models.CharField(blank=True, max_length=30), - ), - migrations.AddField( - model_name='interface', - name='rf_channel', - field=models.CharField(blank=True, max_length=50), - ), - migrations.AddField( - model_name='interface', - name='rf_channel_frequency', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True), - ), - migrations.AddField( - model_name='interface', - name='rf_channel_width', - field=models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True), - ), - migrations.AddField( - model_name='interface', - name='tx_power', - field=models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MaxValueValidator(127)]), - ), - migrations.AddField( - model_name='interface', - name='wireless_lans', - field=models.ManyToManyField(blank=True, related_name='interfaces', to='wireless.WirelessLAN'), - ), - migrations.AddField( - model_name='interface', - name='wireless_link', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wireless.wirelesslink'), - ), - ] diff --git a/netbox/dcim/migrations/0141_asn_model.py b/netbox/dcim/migrations/0141_asn_model.py deleted file mode 100644 index 6f011f35d..000000000 --- a/netbox/dcim/migrations/0141_asn_model.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.8 on 2021-11-02 16:16 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0053_asn_model'), - ('dcim', '0140_wireless'), - ] - - operations = [ - migrations.AddField( - model_name='site', - name='asns', - field=models.ManyToManyField(blank=True, related_name='sites', to='ipam.ASN'), - ), - ] diff --git a/netbox/dcim/migrations/0142_rename_128gfc_qsfp28.py b/netbox/dcim/migrations/0142_rename_128gfc_qsfp28.py deleted file mode 100644 index d1f91afae..000000000 --- a/netbox/dcim/migrations/0142_rename_128gfc_qsfp28.py +++ /dev/null @@ -1,29 +0,0 @@ -from django.db import migrations - -OLD_VALUE = '128gfc-sfp28' -NEW_VALUE = '128gfc-qsfp28' - - -def correct_type(apps, schema_editor): - """ - Correct TYPE_128GFC_QSFP28 interface type. - """ - Interface = apps.get_model('dcim', 'Interface') - InterfaceTemplate = apps.get_model('dcim', 'InterfaceTemplate') - - for model in (Interface, InterfaceTemplate): - model.objects.filter(type=OLD_VALUE).update(type=NEW_VALUE) - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0141_asn_model'), - ] - - operations = [ - migrations.RunPython( - code=correct_type, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0143_remove_primary_for_related_name.py b/netbox/dcim/migrations/0143_remove_primary_for_related_name.py deleted file mode 100644 index 820c9e3fe..000000000 --- a/netbox/dcim/migrations/0143_remove_primary_for_related_name.py +++ /dev/null @@ -1,23 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0053_asn_model'), - ('dcim', '0142_rename_128gfc_qsfp28'), - ] - - operations = [ - migrations.AlterField( - model_name='device', - name='primary_ip4', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress'), - ), - migrations.AlterField( - model_name='device', - name='primary_ip6', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress'), - ), - ] diff --git a/netbox/dcim/migrations/0144_fix_cable_abs_length.py b/netbox/dcim/migrations/0144_fix_cable_abs_length.py deleted file mode 100644 index 0da30ffb5..000000000 --- a/netbox/dcim/migrations/0144_fix_cable_abs_length.py +++ /dev/null @@ -1,31 +0,0 @@ -from django.db import migrations - -from utilities.utils import to_meters - - -def recalculate_abs_length(apps, schema_editor): - """ - Recalculate absolute lengths for all cables with a length and length unit defined. Fixes - incorrectly calculated values as reported under bug #8377. - """ - Cable = apps.get_model('dcim', 'Cable') - - cables = Cable.objects.filter(length__isnull=False).exclude(length_unit='') - for cable in cables: - cable._abs_length = to_meters(cable.length, cable.length_unit) - - Cable.objects.bulk_update(cables, ['_abs_length'], batch_size=100) - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0143_remove_primary_for_related_name'), - ] - - operations = [ - migrations.RunPython( - code=recalculate_abs_length, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0145_site_remove_deprecated_fields.py b/netbox/dcim/migrations/0145_site_remove_deprecated_fields.py deleted file mode 100644 index 86918447d..000000000 --- a/netbox/dcim/migrations/0145_site_remove_deprecated_fields.py +++ /dev/null @@ -1,59 +0,0 @@ -import os - -from django.db import migrations -from django.db.utils import DataError - - -def check_legacy_data(apps, schema_editor): - """ - Abort the migration if any legacy site fields still contain data. - """ - Site = apps.get_model('dcim', 'Site') - - site_count = Site.objects.exclude(asn__isnull=True).count() - if site_count and 'NETBOX_DELETE_LEGACY_DATA' not in os.environ: - raise DataError( - f"Unable to proceed with deleting asn field from Site model: Found {site_count} sites with " - f"legacy ASN data. Please ensure all legacy site ASN data has been migrated to ASN objects " - f"before proceeding. Or, set the NETBOX_DELETE_LEGACY_DATA environment variable to bypass " - f"this safeguard and delete all legacy site ASN data." - ) - - site_count = Site.objects.exclude(contact_name='', contact_phone='', contact_email='').count() - if site_count and 'NETBOX_DELETE_LEGACY_DATA' not in os.environ: - raise DataError( - f"Unable to proceed with deleting contact fields from Site model: Found {site_count} sites " - f"with legacy contact data. Please ensure all legacy site contact data has been migrated to " - f"contact objects before proceeding. Or, set the NETBOX_DELETE_LEGACY_DATA environment " - f"variable to bypass this safeguard and delete all legacy site contact data." - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0144_fix_cable_abs_length'), - ] - - operations = [ - migrations.RunPython( - code=check_legacy_data, - reverse_code=migrations.RunPython.noop - ), - migrations.RemoveField( - model_name='site', - name='asn', - ), - migrations.RemoveField( - model_name='site', - name='contact_email', - ), - migrations.RemoveField( - model_name='site', - name='contact_name', - ), - migrations.RemoveField( - model_name='site', - name='contact_phone', - ), - ] diff --git a/netbox/dcim/migrations/0146_modules.py b/netbox/dcim/migrations/0146_modules.py deleted file mode 100644 index 821cf6119..000000000 --- a/netbox/dcim/migrations/0146_modules.py +++ /dev/null @@ -1,279 +0,0 @@ -from utilities.json import CustomFieldJSONEncoder -from django.db import migrations, models -import django.db.models.deletion -import taggit.managers -import utilities.fields -import utilities.ordering - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0066_customfield_name_validation'), - ('dcim', '0145_site_remove_deprecated_fields'), - ] - - operations = [ - # Rename any indexes left over from the old Module model (now InventoryItem) (#8656) - migrations.RunSQL( - """ - DO $$ - DECLARE - idx record; - BEGIN - FOR idx IN - SELECT indexname AS old_name, - replace(indexname, 'module', 'inventoryitem') AS new_name - FROM pg_indexes - WHERE schemaname = 'public' AND - tablename = 'dcim_inventoryitem' AND - indexname LIKE 'dcim_module_%' - LOOP - EXECUTE format( - 'ALTER INDEX %I RENAME TO %I;', - idx.old_name, - idx.new_name - ); - END LOOP; - END$$; - """ - ), - - migrations.AlterModelOptions( - name='consoleporttemplate', - options={'ordering': ('device_type', 'module_type', '_name')}, - ), - migrations.AlterModelOptions( - name='consoleserverporttemplate', - options={'ordering': ('device_type', 'module_type', '_name')}, - ), - migrations.AlterModelOptions( - name='frontporttemplate', - options={'ordering': ('device_type', 'module_type', '_name')}, - ), - migrations.AlterModelOptions( - name='interfacetemplate', - options={'ordering': ('device_type', 'module_type', '_name')}, - ), - migrations.AlterModelOptions( - name='poweroutlettemplate', - options={'ordering': ('device_type', 'module_type', '_name')}, - ), - migrations.AlterModelOptions( - name='powerporttemplate', - options={'ordering': ('device_type', 'module_type', '_name')}, - ), - migrations.AlterModelOptions( - name='rearporttemplate', - options={'ordering': ('device_type', 'module_type', '_name')}, - ), - migrations.AlterField( - model_name='consoleporttemplate', - name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), - ), - migrations.AlterField( - model_name='consoleserverporttemplate', - name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), - ), - migrations.AlterField( - model_name='frontporttemplate', - name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), - ), - migrations.AlterField( - model_name='interfacetemplate', - name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), - ), - migrations.AlterField( - model_name='poweroutlettemplate', - name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), - ), - migrations.AlterField( - model_name='powerporttemplate', - name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), - ), - migrations.AlterField( - model_name='rearporttemplate', - name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), - ), - migrations.CreateModel( - name='ModuleType', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('model', models.CharField(max_length=100)), - ('part_number', models.CharField(blank=True, max_length=50)), - ('comments', models.TextField(blank=True)), - ('manufacturer', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='module_types', to='dcim.manufacturer')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ], - options={ - 'ordering': ('manufacturer', 'model'), - 'unique_together': {('manufacturer', 'model')}, - }, - ), - migrations.CreateModel( - name='ModuleBay', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), - ('label', models.CharField(blank=True, max_length=64)), - ('position', models.CharField(blank=True, max_length=30)), - ('description', models.CharField(blank=True, max_length=200)), - ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ], - options={ - 'ordering': ('device', '_name'), - 'unique_together': {('device', 'name')}, - }, - ), - migrations.CreateModel( - name='Module', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('local_context_data', models.JSONField(blank=True, null=True)), - ('serial', models.CharField(blank=True, max_length=50)), - ('asset_tag', models.CharField(blank=True, max_length=50, null=True, unique=True)), - ('comments', models.TextField(blank=True)), - ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='modules', to='dcim.device')), - ('module_bay', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='installed_module', to='dcim.modulebay')), - ('module_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='instances', to='dcim.moduletype')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ], - options={ - 'ordering': ('module_bay',), - }, - ), - migrations.AddField( - model_name='consoleport', - name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), - ), - migrations.AddField( - model_name='consoleporttemplate', - name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), - ), - migrations.AddField( - model_name='consoleserverport', - name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), - ), - migrations.AddField( - model_name='consoleserverporttemplate', - name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), - ), - migrations.AddField( - model_name='frontport', - name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), - ), - migrations.AddField( - model_name='frontporttemplate', - name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), - ), - migrations.AddField( - model_name='interface', - name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), - ), - migrations.AddField( - model_name='interfacetemplate', - name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), - ), - migrations.AddField( - model_name='poweroutlet', - name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), - ), - migrations.AddField( - model_name='poweroutlettemplate', - name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), - ), - migrations.AddField( - model_name='powerport', - name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), - ), - migrations.AddField( - model_name='powerporttemplate', - name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), - ), - migrations.AddField( - model_name='rearport', - name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), - ), - migrations.AddField( - model_name='rearporttemplate', - name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), - ), - migrations.AlterUniqueTogether( - name='consoleporttemplate', - unique_together={('device_type', 'name'), ('module_type', 'name')}, - ), - migrations.AlterUniqueTogether( - name='consoleserverporttemplate', - unique_together={('device_type', 'name'), ('module_type', 'name')}, - ), - migrations.AlterUniqueTogether( - name='frontporttemplate', - unique_together={('device_type', 'name'), ('rear_port', 'rear_port_position'), ('module_type', 'name')}, - ), - migrations.AlterUniqueTogether( - name='interfacetemplate', - unique_together={('device_type', 'name'), ('module_type', 'name')}, - ), - migrations.AlterUniqueTogether( - name='poweroutlettemplate', - unique_together={('device_type', 'name'), ('module_type', 'name')}, - ), - migrations.AlterUniqueTogether( - name='powerporttemplate', - unique_together={('device_type', 'name'), ('module_type', 'name')}, - ), - migrations.AlterUniqueTogether( - name='rearporttemplate', - unique_together={('device_type', 'name'), ('module_type', 'name')}, - ), - migrations.CreateModel( - name='ModuleBayTemplate', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), - ('label', models.CharField(blank=True, max_length=64)), - ('position', models.CharField(blank=True, max_length=30)), - ('description', models.CharField(blank=True, max_length=200)), - ('device_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype')), - ], - options={ - 'ordering': ('device_type', '_name'), - 'unique_together': {('device_type', 'name')}, - }, - ), - ] diff --git a/netbox/dcim/migrations/0147_inventoryitemrole.py b/netbox/dcim/migrations/0147_inventoryitemrole.py deleted file mode 100644 index 4b6c27450..000000000 --- a/netbox/dcim/migrations/0147_inventoryitemrole.py +++ /dev/null @@ -1,38 +0,0 @@ -from utilities.json import CustomFieldJSONEncoder -from django.db import migrations, models -import django.db.models.deletion -import taggit.managers -import utilities.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0068_configcontext_cluster_types'), - ('dcim', '0146_modules'), - ] - - operations = [ - migrations.CreateModel( - name='InventoryItemRole', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=100, unique=True)), - ('slug', models.SlugField(max_length=100, unique=True)), - ('color', utilities.fields.ColorField(default='9e9e9e', max_length=6)), - ('description', models.CharField(blank=True, max_length=200)), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ], - options={ - 'ordering': ('name',), - }, - ), - migrations.AddField( - model_name='inventoryitem', - name='role', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_items', to='dcim.inventoryitemrole'), - ), - ] diff --git a/netbox/dcim/migrations/0148_inventoryitem_component.py b/netbox/dcim/migrations/0148_inventoryitem_component.py deleted file mode 100644 index a18f41d3d..000000000 --- a/netbox/dcim/migrations/0148_inventoryitem_component.py +++ /dev/null @@ -1,23 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('dcim', '0147_inventoryitemrole'), - ] - - operations = [ - migrations.AddField( - model_name='inventoryitem', - name='component_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AddField( - model_name='inventoryitem', - name='component_type', - field=models.ForeignKey(blank=True, limit_choices_to=models.Q(('app_label', 'dcim'), ('model__in', ('consoleport', 'consoleserverport', 'frontport', 'interface', 'poweroutlet', 'powerport', 'rearport'))), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype'), - ), - ] diff --git a/netbox/dcim/migrations/0149_inventoryitem_templates.py b/netbox/dcim/migrations/0149_inventoryitem_templates.py deleted file mode 100644 index f0b1f3cff..000000000 --- a/netbox/dcim/migrations/0149_inventoryitem_templates.py +++ /dev/null @@ -1,43 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion -import mptt.fields -import utilities.fields -import utilities.ordering - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('dcim', '0148_inventoryitem_component'), - ] - - operations = [ - migrations.CreateModel( - name='InventoryItemTemplate', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), - ('label', models.CharField(blank=True, max_length=64)), - ('description', models.CharField(blank=True, max_length=200)), - ('component_id', models.PositiveBigIntegerField(blank=True, null=True)), - ('part_id', models.CharField(blank=True, max_length=50)), - ('lft', models.PositiveIntegerField(editable=False)), - ('rght', models.PositiveIntegerField(editable=False)), - ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), - ('level', models.PositiveIntegerField(editable=False)), - ('component_type', models.ForeignKey(blank=True, limit_choices_to=models.Q(('app_label', 'dcim'), ('model__in', ('consoleporttemplate', 'consoleserverporttemplate', 'frontporttemplate', 'interfacetemplate', 'poweroutlettemplate', 'powerporttemplate', 'rearporttemplate'))), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('device_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype')), - ('manufacturer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_item_templates', to='dcim.manufacturer')), - ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child_items', to='dcim.inventoryitemtemplate')), - ('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_item_templates', to='dcim.inventoryitemrole')), - ], - options={ - 'ordering': ('device_type__id', 'parent__id', '_name'), - 'unique_together': {('device_type', 'parent', 'name')}, - }, - ), - ] diff --git a/netbox/dcim/migrations/0150_interface_vrf.py b/netbox/dcim/migrations/0150_interface_vrf.py deleted file mode 100644 index f8741e4a0..000000000 --- a/netbox/dcim/migrations/0150_interface_vrf.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.11 on 2022-01-07 18:34 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0054_vlangroup_min_max_vids'), - ('dcim', '0149_inventoryitem_templates'), - ] - - operations = [ - migrations.AddField( - model_name='interface', - name='vrf', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='interfaces', to='ipam.vrf'), - ), - ] diff --git a/netbox/dcim/migrations/0151_interface_speed_duplex.py b/netbox/dcim/migrations/0151_interface_speed_duplex.py deleted file mode 100644 index 7e800f42a..000000000 --- a/netbox/dcim/migrations/0151_interface_speed_duplex.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.10 on 2022-01-08 18:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0150_interface_vrf'), - ] - - operations = [ - migrations.AddField( - model_name='interface', - name='duplex', - field=models.CharField(blank=True, max_length=50, null=True), - ), - migrations.AddField( - model_name='interface', - name='speed', - field=models.PositiveIntegerField(blank=True, null=True), - ), - ] diff --git a/netbox/dcim/migrations/0152_standardize_id_fields.py b/netbox/dcim/migrations/0152_standardize_id_fields.py deleted file mode 100644 index 6bf5b43f4..000000000 --- a/netbox/dcim/migrations/0152_standardize_id_fields.py +++ /dev/null @@ -1,274 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0151_interface_speed_duplex'), - ] - - operations = [ - # Model IDs - migrations.AlterField( - model_name='cable', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='cablepath', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='consoleport', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='consoleporttemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='consoleserverport', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='consoleserverporttemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='device', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='devicebay', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='devicebaytemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='devicerole', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='devicetype', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='frontport', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='frontporttemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='interface', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='interfacetemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='inventoryitem', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='inventoryitemrole', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='inventoryitemtemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='location', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='manufacturer', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='module', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='modulebay', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='modulebaytemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='moduletype', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='platform', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='powerfeed', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='poweroutlet', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='poweroutlettemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='powerpanel', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='powerport', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='powerporttemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='rack', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='rackreservation', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='rackrole', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='rearport', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='rearporttemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='region', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='site', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='sitegroup', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='virtualchassis', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - - # GFK IDs - migrations.AlterField( - model_name='cable', - name='termination_a_id', - field=models.PositiveBigIntegerField(), - ), - migrations.AlterField( - model_name='cable', - name='termination_b_id', - field=models.PositiveBigIntegerField(), - ), - migrations.AlterField( - model_name='cablepath', - name='destination_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='cablepath', - name='origin_id', - field=models.PositiveBigIntegerField(), - ), - migrations.AlterField( - model_name='consoleport', - name='_link_peer_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='consoleserverport', - name='_link_peer_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='frontport', - name='_link_peer_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='interface', - name='_link_peer_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='powerfeed', - name='_link_peer_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='poweroutlet', - name='_link_peer_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='powerport', - name='_link_peer_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='rearport', - name='_link_peer_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - ] diff --git a/netbox/dcim/migrations/0153_created_datetimefield.py b/netbox/dcim/migrations/0153_created_datetimefield.py deleted file mode 100644 index c1cc4132e..000000000 --- a/netbox/dcim/migrations/0153_created_datetimefield.py +++ /dev/null @@ -1,208 +0,0 @@ -# Generated by Django 4.0.2 on 2022-02-08 18:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0152_standardize_id_fields'), - ] - - operations = [ - migrations.AlterField( - model_name='cable', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='consoleport', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='consoleporttemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='consoleserverport', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='consoleserverporttemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='device', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='devicebay', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='devicebaytemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='devicerole', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='devicetype', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='frontport', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='frontporttemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='interface', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='interfacetemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='inventoryitem', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='inventoryitemrole', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='inventoryitemtemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='location', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='manufacturer', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='module', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='modulebay', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='modulebaytemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='moduletype', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='platform', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='powerfeed', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='poweroutlet', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='poweroutlettemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='powerpanel', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='powerport', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='powerporttemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='rack', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='rackreservation', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='rackrole', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='rearport', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='rearporttemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='region', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='site', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='sitegroup', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='virtualchassis', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - ] diff --git a/netbox/dcim/migrations/0154_half_height_rack_units.py b/netbox/dcim/migrations/0154_half_height_rack_units.py deleted file mode 100644 index f212aa21a..000000000 --- a/netbox/dcim/migrations/0154_half_height_rack_units.py +++ /dev/null @@ -1,23 +0,0 @@ -import django.contrib.postgres.fields -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0153_created_datetimefield'), - ] - - operations = [ - migrations.AlterField( - model_name='devicetype', - name='u_height', - field=models.DecimalField(decimal_places=1, default=1.0, max_digits=4), - ), - migrations.AlterField( - model_name='device', - name='position', - field=models.DecimalField(blank=True, decimal_places=1, max_digits=4, null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100.5)]), - ), - ] diff --git a/netbox/dcim/migrations/0155_interface_poe_mode_type.py b/netbox/dcim/migrations/0155_interface_poe_mode_type.py deleted file mode 100644 index 13f2ddfc0..000000000 --- a/netbox/dcim/migrations/0155_interface_poe_mode_type.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 4.0.5 on 2022-06-22 00:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0154_half_height_rack_units'), - ] - - operations = [ - migrations.AddField( - model_name='interface', - name='poe_mode', - field=models.CharField(blank=True, max_length=50), - ), - migrations.AddField( - model_name='interface', - name='poe_type', - field=models.CharField(blank=True, max_length=50), - ), - migrations.AddField( - model_name='interfacetemplate', - name='poe_mode', - field=models.CharField(blank=True, max_length=50), - ), - migrations.AddField( - model_name='interfacetemplate', - name='poe_type', - field=models.CharField(blank=True, max_length=50), - ), - ] diff --git a/netbox/dcim/migrations/0156_location_status.py b/netbox/dcim/migrations/0156_location_status.py deleted file mode 100644 index b20273755..000000000 --- a/netbox/dcim/migrations/0156_location_status.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.5 on 2022-06-22 17:10 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0155_interface_poe_mode_type'), - ] - - operations = [ - migrations.AddField( - model_name='location', - name='status', - field=models.CharField(default='active', max_length=50), - ), - ] diff --git a/netbox/dcim/migrations/0157_new_cabling_models.py b/netbox/dcim/migrations/0157_new_cabling_models.py deleted file mode 100644 index a3a650086..000000000 --- a/netbox/dcim/migrations/0157_new_cabling_models.py +++ /dev/null @@ -1,95 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('dcim', '0156_location_status'), - ] - - operations = [ - - # Create CableTermination model - migrations.CreateModel( - name='CableTermination', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('cable_end', models.CharField(max_length=1)), - ('termination_id', models.PositiveBigIntegerField()), - ('cable', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='dcim.cable')), - ('termination_type', models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))), models.Q(('app_label', 'dcim'), ('model__in', ('consoleport', 'consoleserverport', 'frontport', 'interface', 'powerfeed', 'poweroutlet', 'powerport', 'rearport'))), _connector='OR')), on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('_device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.device')), - ('_rack', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.rack')), - ('_location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.location')), - ('_site', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.site')), - ], - options={ - 'ordering': ('cable', 'cable_end', 'pk'), - }, - ), - migrations.AddConstraint( - model_name='cabletermination', - constraint=models.UniqueConstraint(fields=('termination_type', 'termination_id'), name='dcim_cable_termination_unique_termination'), - ), - - # Update CablePath model - migrations.RenameField( - model_name='cablepath', - old_name='path', - new_name='_nodes', - ), - migrations.AddField( - model_name='cablepath', - name='path', - field=models.JSONField(default=list), - ), - migrations.AddField( - model_name='cablepath', - name='is_complete', - field=models.BooleanField(default=False), - ), - - # Add cable_end field to cable termination models - migrations.AddField( - model_name='consoleport', - name='cable_end', - field=models.CharField(blank=True, max_length=1), - ), - migrations.AddField( - model_name='consoleserverport', - name='cable_end', - field=models.CharField(blank=True, max_length=1), - ), - migrations.AddField( - model_name='frontport', - name='cable_end', - field=models.CharField(blank=True, max_length=1), - ), - migrations.AddField( - model_name='interface', - name='cable_end', - field=models.CharField(blank=True, max_length=1), - ), - migrations.AddField( - model_name='powerfeed', - name='cable_end', - field=models.CharField(blank=True, max_length=1), - ), - migrations.AddField( - model_name='poweroutlet', - name='cable_end', - field=models.CharField(blank=True, max_length=1), - ), - migrations.AddField( - model_name='powerport', - name='cable_end', - field=models.CharField(blank=True, max_length=1), - ), - migrations.AddField( - model_name='rearport', - name='cable_end', - field=models.CharField(blank=True, max_length=1), - ), - ] diff --git a/netbox/dcim/migrations/0158_populate_cable_terminations.py b/netbox/dcim/migrations/0158_populate_cable_terminations.py deleted file mode 100644 index 72d7f154a..000000000 --- a/netbox/dcim/migrations/0158_populate_cable_terminations.py +++ /dev/null @@ -1,87 +0,0 @@ -import sys - -from django.db import migrations - - -def cache_related_objects(termination): - """ - Replicate caching logic from CableTermination.cache_related_objects() - """ - attrs = {} - - # Device components - if getattr(termination, 'device', None): - attrs['_device'] = termination.device - attrs['_rack'] = termination.device.rack - attrs['_location'] = termination.device.location - attrs['_site'] = termination.device.site - - # Power feeds - elif getattr(termination, 'rack', None): - attrs['_rack'] = termination.rack - attrs['_location'] = termination.rack.location - attrs['_site'] = termination.rack.site - - # Circuit terminations - elif getattr(termination, 'site', None): - attrs['_site'] = termination.site - - return attrs - - -def populate_cable_terminations(apps, schema_editor): - """ - Replicate terminations from the Cable model into CableTermination instances. - """ - ContentType = apps.get_model('contenttypes', 'ContentType') - Cable = apps.get_model('dcim', 'Cable') - CableTermination = apps.get_model('dcim', 'CableTermination') - - # Retrieve the necessary data from Cable objects - cables = Cable.objects.values( - 'id', 'termination_a_type', 'termination_a_id', 'termination_b_type', 'termination_b_id' - ) - - # Queue CableTerminations to be created - cable_terminations = [] - cable_count = cables.count() - for i, cable in enumerate(cables, start=1): - for cable_end in ('a', 'b'): - # We must manually instantiate the termination object, because GFK fields are not - # supported within migrations. - termination_ct = ContentType.objects.get(pk=cable[f'termination_{cable_end}_type']) - termination_model = apps.get_model(termination_ct.app_label, termination_ct.model) - termination = termination_model.objects.get(pk=cable[f'termination_{cable_end}_id']) - - cable_terminations.append(CableTermination( - cable_id=cable['id'], - cable_end=cable_end.upper(), - termination_type_id=cable[f'termination_{cable_end}_type'], - termination_id=cable[f'termination_{cable_end}_id'], - **cache_related_objects(termination) - )) - - # Output progress occasionally - if 'test' not in sys.argv and not i % 100: - progress = float(i) * 100 / cable_count - if i == 100: - print('') - sys.stdout.write(f"\r Updated {i}/{cable_count} cables ({progress:.2f}%)") - sys.stdout.flush() - - # Bulk create the termination objects - CableTermination.objects.bulk_create(cable_terminations, batch_size=100) - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0157_new_cabling_models'), - ] - - operations = [ - migrations.RunPython( - code=populate_cable_terminations, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0159_populate_cable_paths.py b/netbox/dcim/migrations/0159_populate_cable_paths.py deleted file mode 100644 index 22fe4b67e..000000000 --- a/netbox/dcim/migrations/0159_populate_cable_paths.py +++ /dev/null @@ -1,50 +0,0 @@ -from django.db import migrations - -from dcim.utils import compile_path_node - - -def populate_cable_paths(apps, schema_editor): - """ - Replicate terminations from the Cable model into CableTermination instances. - """ - CablePath = apps.get_model('dcim', 'CablePath') - - # Construct the new two-dimensional path, and add the origin & destination objects to the nodes list - cable_paths = [] - for cablepath in CablePath.objects.all(): - - # Origin - origin = compile_path_node(cablepath.origin_type_id, cablepath.origin_id) - cablepath.path.append([origin]) - cablepath._nodes.insert(0, origin) - - # Transit nodes - cablepath.path.extend([ - [node] for node in cablepath._nodes[1:] - ]) - - # Destination - if cablepath.destination_id: - destination = compile_path_node(cablepath.destination_type_id, cablepath.destination_id) - cablepath.path.append([destination]) - cablepath._nodes.append(destination) - cablepath.is_complete = True - - cable_paths.append(cablepath) - - # Bulk update all CableTerminations - CablePath.objects.bulk_update(cable_paths, fields=('path', '_nodes', 'is_complete'), batch_size=100) - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0158_populate_cable_terminations'), - ] - - operations = [ - migrations.RunPython( - code=populate_cable_paths, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0160_populate_cable_ends.py b/netbox/dcim/migrations/0160_populate_cable_ends.py deleted file mode 100644 index 53e042abc..000000000 --- a/netbox/dcim/migrations/0160_populate_cable_ends.py +++ /dev/null @@ -1,46 +0,0 @@ -from django.db import migrations - - -def populate_cable_terminations(apps, schema_editor): - Cable = apps.get_model('dcim', 'Cable') - - cable_termination_models = ( - apps.get_model('dcim', 'ConsolePort'), - apps.get_model('dcim', 'ConsoleServerPort'), - apps.get_model('dcim', 'PowerPort'), - apps.get_model('dcim', 'PowerOutlet'), - apps.get_model('dcim', 'Interface'), - apps.get_model('dcim', 'FrontPort'), - apps.get_model('dcim', 'RearPort'), - apps.get_model('dcim', 'PowerFeed'), - apps.get_model('circuits', 'CircuitTermination'), - ) - - for model in cable_termination_models: - model.objects.filter( - id__in=Cable.objects.filter( - termination_a_type__app_label=model._meta.app_label, - termination_a_type__model=model._meta.model_name - ).values_list('termination_a_id', flat=True) - ).update(cable_end='A') - model.objects.filter( - id__in=Cable.objects.filter( - termination_b_type__app_label=model._meta.app_label, - termination_b_type__model=model._meta.model_name - ).values_list('termination_b_id', flat=True) - ).update(cable_end='B') - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0037_new_cabling_models'), - ('dcim', '0159_populate_cable_paths'), - ] - - operations = [ - migrations.RunPython( - code=populate_cable_terminations, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0162_unique_constraints.py b/netbox/dcim/migrations/0160_squashed_0166.py similarity index 58% rename from netbox/dcim/migrations/0162_unique_constraints.py rename to netbox/dcim/migrations/0160_squashed_0166.py index d52dbb6c9..440a8115e 100644 --- a/netbox/dcim/migrations/0162_unique_constraints.py +++ b/netbox/dcim/migrations/0160_squashed_0166.py @@ -1,14 +1,146 @@ -from django.db import migrations, models import django.db.models.functions.text +import taggit.managers +from django.db import migrations, models + +import utilities.json class Migration(migrations.Migration): - dependencies = [ + replaces = [ + ('dcim', '0160_populate_cable_ends'), ('dcim', '0161_cabling_cleanup'), + ('dcim', '0162_unique_constraints'), + ('dcim', '0163_weight_fields'), + ('dcim', '0164_rack_mounting_depth'), + ('dcim', '0165_standardize_description_comments'), + ('dcim', '0166_virtualdevicecontext') + ] + + dependencies = [ + ('ipam', '0047_squashed_0053'), + ('tenancy', '0009_standardize_description_comments'), + ('circuits', '0037_new_cabling_models'), + ('dcim', '0159_populate_cable_paths'), ] operations = [ + migrations.AlterModelOptions( + name='cable', + options={'ordering': ('pk',)}, + ), + migrations.AlterUniqueTogether( + name='cable', + unique_together=set(), + ), + migrations.RemoveField( + model_name='cable', + name='termination_a_id', + ), + migrations.RemoveField( + model_name='cable', + name='termination_a_type', + ), + migrations.RemoveField( + model_name='cable', + name='termination_b_id', + ), + migrations.RemoveField( + model_name='cable', + name='termination_b_type', + ), + migrations.RemoveField( + model_name='cable', + name='_termination_a_device', + ), + migrations.RemoveField( + model_name='cable', + name='_termination_b_device', + ), + migrations.AlterUniqueTogether( + name='cablepath', + unique_together=set(), + ), + migrations.RemoveField( + model_name='cablepath', + name='destination_id', + ), + migrations.RemoveField( + model_name='cablepath', + name='destination_type', + ), + migrations.RemoveField( + model_name='cablepath', + name='origin_id', + ), + migrations.RemoveField( + model_name='cablepath', + name='origin_type', + ), + migrations.RemoveField( + model_name='consoleport', + name='_link_peer_id', + ), + migrations.RemoveField( + model_name='consoleport', + name='_link_peer_type', + ), + migrations.RemoveField( + model_name='consoleserverport', + name='_link_peer_id', + ), + migrations.RemoveField( + model_name='consoleserverport', + name='_link_peer_type', + ), + migrations.RemoveField( + model_name='frontport', + name='_link_peer_id', + ), + migrations.RemoveField( + model_name='frontport', + name='_link_peer_type', + ), + migrations.RemoveField( + model_name='interface', + name='_link_peer_id', + ), + migrations.RemoveField( + model_name='interface', + name='_link_peer_type', + ), + migrations.RemoveField( + model_name='powerfeed', + name='_link_peer_id', + ), + migrations.RemoveField( + model_name='powerfeed', + name='_link_peer_type', + ), + migrations.RemoveField( + model_name='poweroutlet', + name='_link_peer_id', + ), + migrations.RemoveField( + model_name='poweroutlet', + name='_link_peer_type', + ), + migrations.RemoveField( + model_name='powerport', + name='_link_peer_id', + ), + migrations.RemoveField( + model_name='powerport', + name='_link_peer_type', + ), + migrations.RemoveField( + model_name='rearport', + name='_link_peer_id', + ), + migrations.RemoveField( + model_name='rearport', + name='_link_peer_type', + ), migrations.RemoveConstraint( model_name='cabletermination', name='dcim_cable_termination_unique_termination', @@ -329,4 +461,164 @@ class Migration(migrations.Migration): model_name='sitegroup', constraint=models.UniqueConstraint(condition=models.Q(('parent__isnull', True)), fields=('slug',), name='dcim_sitegroup_slug', violation_error_message='A top-level site group with this slug already exists.'), ), + migrations.AddField( + model_name='devicetype', + name='weight', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), + ), + migrations.AddField( + model_name='devicetype', + name='weight_unit', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='devicetype', + name='_abs_weight', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='moduletype', + name='weight', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), + ), + migrations.AddField( + model_name='moduletype', + name='weight_unit', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='moduletype', + name='_abs_weight', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='rack', + name='weight', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), + ), + migrations.AddField( + model_name='rack', + name='max_weight', + field=models.PositiveIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='rack', + name='weight_unit', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='rack', + name='_abs_weight', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='rack', + name='_abs_max_weight', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='rack', + name='mounting_depth', + field=models.PositiveSmallIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='cable', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='cable', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='device', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='devicetype', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='module', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='moduletype', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='powerfeed', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='powerpanel', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='powerpanel', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='rack', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='rackreservation', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='virtualchassis', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='virtualchassis', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.CreateModel( + name='VirtualDeviceContext', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('description', models.CharField(blank=True, max_length=200)), + ('name', models.CharField(max_length=64)), + ('status', models.CharField(max_length=50)), + ('identifier', models.PositiveSmallIntegerField(blank=True, null=True)), + ('comments', models.TextField(blank=True)), + ('device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vdcs', to='dcim.device')), + ('primary_ip4', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress')), + ('primary_ip6', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vdcs', to='tenancy.tenant')), + ], + options={ + 'ordering': ['name'], + }, + ), + migrations.AddField( + model_name='interface', + name='vdcs', + field=models.ManyToManyField(related_name='interfaces', to='dcim.virtualdevicecontext'), + ), + migrations.AddConstraint( + model_name='virtualdevicecontext', + constraint=models.UniqueConstraint(fields=('device', 'identifier'), name='dcim_virtualdevicecontext_device_identifier'), + ), + migrations.AddConstraint( + model_name='virtualdevicecontext', + constraint=models.UniqueConstraint(fields=('device', 'name'), name='dcim_virtualdevicecontext_device_name'), + ), ] diff --git a/netbox/dcim/migrations/0161_cabling_cleanup.py b/netbox/dcim/migrations/0161_cabling_cleanup.py deleted file mode 100644 index 8a1b7a09e..000000000 --- a/netbox/dcim/migrations/0161_cabling_cleanup.py +++ /dev/null @@ -1,134 +0,0 @@ -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0160_populate_cable_ends'), - ] - - operations = [ - - # Remove old fields from Cable - migrations.AlterModelOptions( - name='cable', - options={'ordering': ('pk',)}, - ), - migrations.AlterUniqueTogether( - name='cable', - unique_together=set(), - ), - migrations.RemoveField( - model_name='cable', - name='termination_a_id', - ), - migrations.RemoveField( - model_name='cable', - name='termination_a_type', - ), - migrations.RemoveField( - model_name='cable', - name='termination_b_id', - ), - migrations.RemoveField( - model_name='cable', - name='termination_b_type', - ), - migrations.RemoveField( - model_name='cable', - name='_termination_a_device', - ), - migrations.RemoveField( - model_name='cable', - name='_termination_b_device', - ), - - # Remove old fields from CablePath - migrations.AlterUniqueTogether( - name='cablepath', - unique_together=set(), - ), - migrations.RemoveField( - model_name='cablepath', - name='destination_id', - ), - migrations.RemoveField( - model_name='cablepath', - name='destination_type', - ), - migrations.RemoveField( - model_name='cablepath', - name='origin_id', - ), - migrations.RemoveField( - model_name='cablepath', - name='origin_type', - ), - - # Remove link peer type/ID fields from cable termination models - migrations.RemoveField( - model_name='consoleport', - name='_link_peer_id', - ), - migrations.RemoveField( - model_name='consoleport', - name='_link_peer_type', - ), - migrations.RemoveField( - model_name='consoleserverport', - name='_link_peer_id', - ), - migrations.RemoveField( - model_name='consoleserverport', - name='_link_peer_type', - ), - migrations.RemoveField( - model_name='frontport', - name='_link_peer_id', - ), - migrations.RemoveField( - model_name='frontport', - name='_link_peer_type', - ), - migrations.RemoveField( - model_name='interface', - name='_link_peer_id', - ), - migrations.RemoveField( - model_name='interface', - name='_link_peer_type', - ), - migrations.RemoveField( - model_name='powerfeed', - name='_link_peer_id', - ), - migrations.RemoveField( - model_name='powerfeed', - name='_link_peer_type', - ), - migrations.RemoveField( - model_name='poweroutlet', - name='_link_peer_id', - ), - migrations.RemoveField( - model_name='poweroutlet', - name='_link_peer_type', - ), - migrations.RemoveField( - model_name='powerport', - name='_link_peer_id', - ), - migrations.RemoveField( - model_name='powerport', - name='_link_peer_type', - ), - migrations.RemoveField( - model_name='rearport', - name='_link_peer_id', - ), - migrations.RemoveField( - model_name='rearport', - name='_link_peer_type', - ), - - ] diff --git a/netbox/dcim/migrations/0163_weight_fields.py b/netbox/dcim/migrations/0163_weight_fields.py deleted file mode 100644 index ddcc01164..000000000 --- a/netbox/dcim/migrations/0163_weight_fields.py +++ /dev/null @@ -1,72 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0162_unique_constraints'), - ] - - operations = [ - - # Device types - migrations.AddField( - model_name='devicetype', - name='weight', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), - ), - migrations.AddField( - model_name='devicetype', - name='weight_unit', - field=models.CharField(blank=True, max_length=50), - ), - migrations.AddField( - model_name='devicetype', - name='_abs_weight', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - - # Module types - migrations.AddField( - model_name='moduletype', - name='weight', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), - ), - migrations.AddField( - model_name='moduletype', - name='weight_unit', - field=models.CharField(blank=True, max_length=50), - ), - migrations.AddField( - model_name='moduletype', - name='_abs_weight', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - - # Racks - migrations.AddField( - model_name='rack', - name='weight', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), - ), - migrations.AddField( - model_name='rack', - name='max_weight', - field=models.PositiveIntegerField(blank=True, null=True), - ), - migrations.AddField( - model_name='rack', - name='weight_unit', - field=models.CharField(blank=True, max_length=50), - ), - migrations.AddField( - model_name='rack', - name='_abs_weight', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - migrations.AddField( - model_name='rack', - name='_abs_max_weight', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - ] diff --git a/netbox/dcim/migrations/0164_rack_mounting_depth.py b/netbox/dcim/migrations/0164_rack_mounting_depth.py deleted file mode 100644 index 96836e0d6..000000000 --- a/netbox/dcim/migrations/0164_rack_mounting_depth.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.1 on 2022-10-27 14:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0163_weight_fields'), - ] - - operations = [ - migrations.AddField( - model_name='rack', - name='mounting_depth', - field=models.PositiveSmallIntegerField(blank=True, null=True), - ), - ] diff --git a/netbox/dcim/migrations/0165_standardize_description_comments.py b/netbox/dcim/migrations/0165_standardize_description_comments.py deleted file mode 100644 index f17f1d321..000000000 --- a/netbox/dcim/migrations/0165_standardize_description_comments.py +++ /dev/null @@ -1,78 +0,0 @@ -# Generated by Django 4.1.2 on 2022-11-03 18:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0164_rack_mounting_depth'), - ] - - operations = [ - migrations.AddField( - model_name='cable', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='cable', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - migrations.AddField( - model_name='device', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - migrations.AddField( - model_name='devicetype', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - migrations.AddField( - model_name='module', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - migrations.AddField( - model_name='moduletype', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - migrations.AddField( - model_name='powerfeed', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - migrations.AddField( - model_name='powerpanel', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='powerpanel', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - migrations.AddField( - model_name='rack', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - migrations.AddField( - model_name='rackreservation', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='virtualchassis', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='virtualchassis', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - ] diff --git a/netbox/dcim/migrations/0166_virtualdevicecontext.py b/netbox/dcim/migrations/0166_virtualdevicecontext.py deleted file mode 100644 index 05becbdc6..000000000 --- a/netbox/dcim/migrations/0166_virtualdevicecontext.py +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by Django 4.1.2 on 2022-11-10 16:56 - -from django.db import migrations, models -import django.db.models.deletion -import taggit.managers -import utilities.json - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0063_standardize_description_comments'), - ('extras', '0082_savedfilter'), - ('tenancy', '0009_standardize_description_comments'), - ('dcim', '0165_standardize_description_comments'), - ] - - operations = [ - migrations.CreateModel( - name='VirtualDeviceContext', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), - ('description', models.CharField(blank=True, max_length=200)), - ('name', models.CharField(max_length=64)), - ('status', models.CharField(max_length=50)), - ('identifier', models.PositiveSmallIntegerField(blank=True, null=True)), - ('comments', models.TextField(blank=True)), - ('device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vdcs', to='dcim.device')), - ('primary_ip4', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress')), - ('primary_ip6', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vdcs', to='tenancy.tenant')), - ], - options={ - 'ordering': ['name'], - }, - ), - migrations.AddField( - model_name='interface', - name='vdcs', - field=models.ManyToManyField(related_name='interfaces', to='dcim.virtualdevicecontext'), - ), - migrations.AddConstraint( - model_name='virtualdevicecontext', - constraint=models.UniqueConstraint(fields=('device', 'identifier'), name='dcim_virtualdevicecontext_device_identifier'), - ), - migrations.AddConstraint( - model_name='virtualdevicecontext', - constraint=models.UniqueConstraint(fields=('device', 'name'), name='dcim_virtualdevicecontext_device_name'), - ), - ] diff --git a/netbox/dcim/migrations/0167_module_status.py b/netbox/dcim/migrations/0167_module_status.py deleted file mode 100644 index c048b4bd8..000000000 --- a/netbox/dcim/migrations/0167_module_status.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.2 on 2022-12-09 15:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0166_virtualdevicecontext'), - ] - - operations = [ - migrations.AddField( - model_name='module', - name='status', - field=models.CharField(default='active', max_length=50), - ), - ] diff --git a/netbox/dcim/migrations/0167_squashed_0182.py b/netbox/dcim/migrations/0167_squashed_0182.py new file mode 100644 index 000000000..735cb3efa --- /dev/null +++ b/netbox/dcim/migrations/0167_squashed_0182.py @@ -0,0 +1,251 @@ +import django.core.validators +import django.db.models.deletion +from django.db import migrations, models + +import utilities.fields + + +class Migration(migrations.Migration): + + replaces = [ + ('dcim', '0167_module_status'), + ('dcim', '0168_interface_template_enabled'), + ('dcim', '0169_devicetype_default_platform'), + ('dcim', '0170_configtemplate'), + ('dcim', '0171_cabletermination_change_logging'), + ('dcim', '0172_larger_power_draw_values'), + ('dcim', '0173_remove_napalm_fields'), + ('dcim', '0174_device_latitude_device_longitude'), + ('dcim', '0174_rack_starting_unit'), + ('dcim', '0175_device_oob_ip'), + ('dcim', '0176_device_component_counters'), + ('dcim', '0177_devicetype_component_counters'), + ('dcim', '0178_virtual_chassis_member_counter'), + ('dcim', '0179_interfacetemplate_rf_role'), + ('dcim', '0180_powerfeed_tenant'), + ('dcim', '0181_rename_device_role_device_role'), + ('dcim', '0182_zero_length_cable_fix') + ] + + dependencies = [ + ('extras', '0086_configtemplate'), + ('tenancy', '0010_tenant_relax_uniqueness'), + ('ipam', '0047_squashed_0053'), + ('dcim', '0166_virtualdevicecontext'), + ] + + operations = [ + migrations.AddField( + model_name='module', + name='status', + field=models.CharField(default='active', max_length=50), + ), + migrations.AddField( + model_name='interfacetemplate', + name='enabled', + field=models.BooleanField(default=True), + ), + migrations.AddField( + model_name='interfacetemplate', + name='bridge', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bridge_interfaces', to='dcim.interfacetemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='default_platform', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.platform'), + ), + migrations.AddField( + model_name='device', + name='config_template', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='%(class)ss', to='extras.configtemplate'), + ), + migrations.AddField( + model_name='devicerole', + name='config_template', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='device_roles', to='extras.configtemplate'), + ), + migrations.AddField( + model_name='platform', + name='config_template', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='platforms', to='extras.configtemplate'), + ), + migrations.AddField( + model_name='cabletermination', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name='cabletermination', + name='last_updated', + field=models.DateTimeField(auto_now=True, null=True), + ), + migrations.AlterField( + model_name='powerport', + name='allocated_draw', + field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + ), + migrations.AlterField( + model_name='powerport', + name='maximum_draw', + field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + ), + migrations.AlterField( + model_name='powerporttemplate', + name='allocated_draw', + field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + ), + migrations.AlterField( + model_name='powerporttemplate', + name='maximum_draw', + field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + ), + migrations.RemoveField( + model_name='platform', + name='napalm_args', + ), + migrations.RemoveField( + model_name='platform', + name='napalm_driver', + ), + migrations.AddField( + model_name='device', + name='latitude', + field=models.DecimalField(blank=True, decimal_places=6, max_digits=8, null=True), + ), + migrations.AddField( + model_name='device', + name='longitude', + field=models.DecimalField(blank=True, decimal_places=6, max_digits=9, null=True), + ), + migrations.AddField( + model_name='rack', + name='starting_unit', + field=models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1)]), + ), + migrations.AddField( + model_name='device', + name='oob_ip', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress'), + ), + migrations.AddField( + model_name='device', + name='console_port_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.ConsolePort'), + ), + migrations.AddField( + model_name='device', + name='console_server_port_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.ConsoleServerPort'), + ), + migrations.AddField( + model_name='device', + name='power_port_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.PowerPort'), + ), + migrations.AddField( + model_name='device', + name='power_outlet_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.PowerOutlet'), + ), + migrations.AddField( + model_name='device', + name='interface_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.Interface'), + ), + migrations.AddField( + model_name='device', + name='front_port_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.FrontPort'), + ), + migrations.AddField( + model_name='device', + name='rear_port_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.RearPort'), + ), + migrations.AddField( + model_name='device', + name='device_bay_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.DeviceBay'), + ), + migrations.AddField( + model_name='device', + name='module_bay_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.ModuleBay'), + ), + migrations.AddField( + model_name='device', + name='inventory_item_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.InventoryItem'), + ), + migrations.AddField( + model_name='devicetype', + name='console_port_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.ConsolePortTemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='console_server_port_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.ConsoleServerPortTemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='power_port_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.PowerPortTemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='power_outlet_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.PowerOutletTemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='interface_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.InterfaceTemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='front_port_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.FrontPortTemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='rear_port_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.RearPortTemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='device_bay_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.DeviceBayTemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='module_bay_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.ModuleBayTemplate'), + ), + migrations.AddField( + model_name='devicetype', + name='inventory_item_template_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.InventoryItemTemplate'), + ), + migrations.AddField( + model_name='virtualchassis', + name='member_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='virtual_chassis', to_model='dcim.Device'), + ), + migrations.AddField( + model_name='interfacetemplate', + name='rf_role', + field=models.CharField(blank=True, max_length=30), + ), + migrations.AddField( + model_name='powerfeed', + name='tenant', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='power_feeds', to='tenancy.tenant'), + ), + migrations.RenameField( + model_name='device', + old_name='device_role', + new_name='role', + ), + ] diff --git a/netbox/dcim/migrations/0168_interface_template_enabled.py b/netbox/dcim/migrations/0168_interface_template_enabled.py deleted file mode 100644 index af18be51d..000000000 --- a/netbox/dcim/migrations/0168_interface_template_enabled.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0167_module_status'), - ] - - operations = [ - migrations.AddField( - model_name='interfacetemplate', - name='enabled', - field=models.BooleanField(default=True), - ), - migrations.AddField( - model_name='interfacetemplate', - name='bridge', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bridge_interfaces', to='dcim.interfacetemplate'), - ), - ] diff --git a/netbox/dcim/migrations/0169_devicetype_default_platform.py b/netbox/dcim/migrations/0169_devicetype_default_platform.py deleted file mode 100644 index a143f2c62..000000000 --- a/netbox/dcim/migrations/0169_devicetype_default_platform.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.1.6 on 2023-02-10 18:06 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0168_interface_template_enabled'), - ] - - operations = [ - migrations.AddField( - model_name='devicetype', - name='default_platform', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.platform'), - ), - ] diff --git a/netbox/dcim/migrations/0170_configtemplate.py b/netbox/dcim/migrations/0170_configtemplate.py deleted file mode 100644 index f9508424d..000000000 --- a/netbox/dcim/migrations/0170_configtemplate.py +++ /dev/null @@ -1,28 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0086_configtemplate'), - ('dcim', '0169_devicetype_default_platform'), - ] - - operations = [ - migrations.AddField( - model_name='device', - name='config_template', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='%(class)ss', to='extras.configtemplate'), - ), - migrations.AddField( - model_name='devicerole', - name='config_template', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='device_roles', to='extras.configtemplate'), - ), - migrations.AddField( - model_name='platform', - name='config_template', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='platforms', to='extras.configtemplate'), - ), - ] diff --git a/netbox/dcim/migrations/0171_cabletermination_change_logging.py b/netbox/dcim/migrations/0171_cabletermination_change_logging.py deleted file mode 100644 index e2131e45d..000000000 --- a/netbox/dcim/migrations/0171_cabletermination_change_logging.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0170_configtemplate'), - ] - - operations = [ - migrations.AddField( - model_name='cabletermination', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AddField( - model_name='cabletermination', - name='last_updated', - field=models.DateTimeField(auto_now=True, null=True), - ), - ] diff --git a/netbox/dcim/migrations/0172_larger_power_draw_values.py b/netbox/dcim/migrations/0172_larger_power_draw_values.py deleted file mode 100644 index 729daf836..000000000 --- a/netbox/dcim/migrations/0172_larger_power_draw_values.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 4.1.9 on 2023-05-12 18:46 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0171_cabletermination_change_logging'), - ] - - operations = [ - migrations.AlterField( - model_name='powerport', - name='allocated_draw', - field=models.PositiveIntegerField( - blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] - ), - ), - migrations.AlterField( - model_name='powerport', - name='maximum_draw', - field=models.PositiveIntegerField( - blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] - ), - ), - migrations.AlterField( - model_name='powerporttemplate', - name='allocated_draw', - field=models.PositiveIntegerField( - blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] - ), - ), - migrations.AlterField( - model_name='powerporttemplate', - name='maximum_draw', - field=models.PositiveIntegerField( - blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] - ), - ), - ] diff --git a/netbox/dcim/migrations/0173_remove_napalm_fields.py b/netbox/dcim/migrations/0173_remove_napalm_fields.py deleted file mode 100644 index 61c7c5695..000000000 --- a/netbox/dcim/migrations/0173_remove_napalm_fields.py +++ /dev/null @@ -1,19 +0,0 @@ -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0172_larger_power_draw_values'), - ] - - operations = [ - migrations.RemoveField( - model_name='platform', - name='napalm_args', - ), - migrations.RemoveField( - model_name='platform', - name='napalm_driver', - ), - ] diff --git a/netbox/dcim/migrations/0174_device_latitude_device_longitude.py b/netbox/dcim/migrations/0174_device_latitude_device_longitude.py deleted file mode 100644 index f9f72f9f8..000000000 --- a/netbox/dcim/migrations/0174_device_latitude_device_longitude.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 4.1.9 on 2023-05-31 22:13 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('dcim', '0173_remove_napalm_fields'), - ] - - operations = [ - migrations.AddField( - model_name='device', - name='latitude', - field=models.DecimalField(blank=True, decimal_places=6, max_digits=8, null=True), - ), - migrations.AddField( - model_name='device', - name='longitude', - field=models.DecimalField(blank=True, decimal_places=6, max_digits=9, null=True), - ), - ] diff --git a/netbox/dcim/migrations/0174_rack_starting_unit.py b/netbox/dcim/migrations/0174_rack_starting_unit.py deleted file mode 100644 index 2d2b5f826..000000000 --- a/netbox/dcim/migrations/0174_rack_starting_unit.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.9 on 2023-05-31 15:47 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('dcim', '0174_device_latitude_device_longitude'), - ] - - operations = [ - migrations.AddField( - model_name='rack', - name='starting_unit', - field=models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1)]), - ), - ] diff --git a/netbox/dcim/migrations/0175_device_oob_ip.py b/netbox/dcim/migrations/0175_device_oob_ip.py deleted file mode 100644 index bf6a88ba8..000000000 --- a/netbox/dcim/migrations/0175_device_oob_ip.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 4.1.9 on 2023-07-24 20:29 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - dependencies = [ - ('ipam', '0066_iprange_mark_utilized'), - ('dcim', '0174_rack_starting_unit'), - ] - - operations = [ - migrations.AddField( - model_name='device', - name='oob_ip', - field=models.OneToOneField( - blank=True, - null=True, - on_delete=django.db.models.deletion.SET_NULL, - related_name='+', - to='ipam.ipaddress', - ), - ), - ] diff --git a/netbox/dcim/migrations/0176_device_component_counters.py b/netbox/dcim/migrations/0176_device_component_counters.py deleted file mode 100644 index 60857ecb9..000000000 --- a/netbox/dcim/migrations/0176_device_component_counters.py +++ /dev/null @@ -1,83 +0,0 @@ -from django.db import migrations -from django.db.models import Count - -import utilities.fields -from utilities.counters import update_counts - - -def recalculate_device_counts(apps, schema_editor): - Device = apps.get_model("dcim", "Device") - - update_counts(Device, 'console_port_count', 'consoleports') - update_counts(Device, 'console_server_port_count', 'consoleserverports') - update_counts(Device, 'power_port_count', 'powerports') - update_counts(Device, 'power_outlet_count', 'poweroutlets') - update_counts(Device, 'interface_count', 'interfaces') - update_counts(Device, 'front_port_count', 'frontports') - update_counts(Device, 'rear_port_count', 'rearports') - update_counts(Device, 'device_bay_count', 'devicebays') - update_counts(Device, 'module_bay_count', 'modulebays') - update_counts(Device, 'inventory_item_count', 'inventoryitems') - - -class Migration(migrations.Migration): - dependencies = [ - ('dcim', '0175_device_oob_ip'), - ] - - operations = [ - migrations.AddField( - model_name='device', - name='console_port_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.ConsolePort'), - ), - migrations.AddField( - model_name='device', - name='console_server_port_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.ConsoleServerPort'), - ), - migrations.AddField( - model_name='device', - name='power_port_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.PowerPort'), - ), - migrations.AddField( - model_name='device', - name='power_outlet_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.PowerOutlet'), - ), - migrations.AddField( - model_name='device', - name='interface_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.Interface'), - ), - migrations.AddField( - model_name='device', - name='front_port_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.FrontPort'), - ), - migrations.AddField( - model_name='device', - name='rear_port_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.RearPort'), - ), - migrations.AddField( - model_name='device', - name='device_bay_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.DeviceBay'), - ), - migrations.AddField( - model_name='device', - name='module_bay_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.ModuleBay'), - ), - migrations.AddField( - model_name='device', - name='inventory_item_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.InventoryItem'), - ), - migrations.RunPython( - recalculate_device_counts, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0177_devicetype_component_counters.py b/netbox/dcim/migrations/0177_devicetype_component_counters.py deleted file mode 100644 index b452ce2d9..000000000 --- a/netbox/dcim/migrations/0177_devicetype_component_counters.py +++ /dev/null @@ -1,83 +0,0 @@ -from django.db import migrations -from django.db.models import Count - -import utilities.fields -from utilities.counters import update_counts - - -def recalculate_devicetype_template_counts(apps, schema_editor): - DeviceType = apps.get_model("dcim", "DeviceType") - - update_counts(DeviceType, 'console_port_template_count', 'consoleporttemplates') - update_counts(DeviceType, 'console_server_port_template_count', 'consoleserverporttemplates') - update_counts(DeviceType, 'power_port_template_count', 'powerporttemplates') - update_counts(DeviceType, 'power_outlet_template_count', 'poweroutlettemplates') - update_counts(DeviceType, 'interface_template_count', 'interfacetemplates') - update_counts(DeviceType, 'front_port_template_count', 'frontporttemplates') - update_counts(DeviceType, 'rear_port_template_count', 'rearporttemplates') - update_counts(DeviceType, 'device_bay_template_count', 'devicebaytemplates') - update_counts(DeviceType, 'module_bay_template_count', 'modulebaytemplates') - update_counts(DeviceType, 'inventory_item_template_count', 'inventoryitemtemplates') - - -class Migration(migrations.Migration): - dependencies = [ - ('dcim', '0176_device_component_counters'), - ] - - operations = [ - migrations.AddField( - model_name='devicetype', - name='console_port_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.ConsolePortTemplate'), - ), - migrations.AddField( - model_name='devicetype', - name='console_server_port_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.ConsoleServerPortTemplate'), - ), - migrations.AddField( - model_name='devicetype', - name='power_port_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.PowerPortTemplate'), - ), - migrations.AddField( - model_name='devicetype', - name='power_outlet_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.PowerOutletTemplate'), - ), - migrations.AddField( - model_name='devicetype', - name='interface_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.InterfaceTemplate'), - ), - migrations.AddField( - model_name='devicetype', - name='front_port_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.FrontPortTemplate'), - ), - migrations.AddField( - model_name='devicetype', - name='rear_port_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.RearPortTemplate'), - ), - migrations.AddField( - model_name='devicetype', - name='device_bay_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.DeviceBayTemplate'), - ), - migrations.AddField( - model_name='devicetype', - name='module_bay_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.ModuleBayTemplate'), - ), - migrations.AddField( - model_name='devicetype', - name='inventory_item_template_count', - field=utilities.fields.CounterCacheField(default=0, to_field='device_type', to_model='dcim.InventoryItemTemplate'), - ), - migrations.RunPython( - recalculate_devicetype_template_counts, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0178_virtual_chassis_member_counter.py b/netbox/dcim/migrations/0178_virtual_chassis_member_counter.py deleted file mode 100644 index 99b304b66..000000000 --- a/netbox/dcim/migrations/0178_virtual_chassis_member_counter.py +++ /dev/null @@ -1,31 +0,0 @@ -from django.db import migrations -from django.db.models import Count - -import utilities.fields -from utilities.counters import update_counts - - -def populate_virtualchassis_members(apps, schema_editor): - VirtualChassis = apps.get_model('dcim', 'VirtualChassis') - - update_counts(VirtualChassis, 'member_count', 'members') - - -class Migration(migrations.Migration): - dependencies = [ - ('dcim', '0177_devicetype_component_counters'), - ] - - operations = [ - migrations.AddField( - model_name='virtualchassis', - name='member_count', - field=utilities.fields.CounterCacheField( - default=0, to_field='virtual_chassis', to_model='dcim.Device' - ), - ), - migrations.RunPython( - code=populate_virtualchassis_members, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0179_interfacetemplate_rf_role.py b/netbox/dcim/migrations/0179_interfacetemplate_rf_role.py deleted file mode 100644 index 44eb08853..000000000 --- a/netbox/dcim/migrations/0179_interfacetemplate_rf_role.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.2 on 2023-07-18 07:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0178_virtual_chassis_member_counter'), - ] - - operations = [ - migrations.AddField( - model_name='interfacetemplate', - name='rf_role', - field=models.CharField(blank=True, max_length=30), - ), - ] diff --git a/netbox/dcim/migrations/0180_powerfeed_tenant.py b/netbox/dcim/migrations/0180_powerfeed_tenant.py deleted file mode 100644 index af550b21d..000000000 --- a/netbox/dcim/migrations/0180_powerfeed_tenant.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.1.8 on 2023-07-29 11:29 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0010_tenant_relax_uniqueness'), - ('dcim', '0179_interfacetemplate_rf_role'), - ] - - operations = [ - migrations.AddField( - model_name='powerfeed', - name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='power_feeds', to='tenancy.tenant'), - ), - ] diff --git a/netbox/dcim/migrations/0181_rename_device_role_device_role.py b/netbox/dcim/migrations/0181_rename_device_role_device_role.py deleted file mode 100644 index e32e00221..000000000 --- a/netbox/dcim/migrations/0181_rename_device_role_device_role.py +++ /dev/null @@ -1,35 +0,0 @@ -from django.db import migrations - - -def update_table_configs(apps, schema_editor): - """ - Replace the `device_role` column in DeviceTable configs with `role`. - """ - UserConfig = apps.get_model('users', 'UserConfig') - - for table in ('DeviceTable', 'DeviceBayTable'): - for config in UserConfig.objects.filter(**{f'data__tables__{table}__columns__contains': 'device_role'}): - config.data['tables'][table]['columns'] = [ - 'role' if x == 'device_role' else x - for x in config.data['tables'][table]['columns'] - ] - config.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0180_powerfeed_tenant'), - ] - - operations = [ - migrations.RenameField( - model_name='device', - old_name='device_role', - new_name='role', - ), - migrations.RunPython( - code=update_table_configs, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0182_zero_length_cable_fix.py b/netbox/dcim/migrations/0182_zero_length_cable_fix.py deleted file mode 100644 index 080e00717..000000000 --- a/netbox/dcim/migrations/0182_zero_length_cable_fix.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.db import migrations - - -def update_cable_lengths(apps, schema_editor): - Cable = apps.get_model('dcim', 'Cable') - - # Set the absolute length for any zero-length Cables - Cable.objects.filter(length=0).update(_abs_length=0) - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0181_rename_device_role_device_role'), - ] - - operations = [ - migrations.RunPython( - code=update_cable_lengths, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/extras/migrations/0060_customlink_button_class.py b/netbox/extras/migrations/0060_customlink_button_class.py deleted file mode 100644 index d54df3042..000000000 --- a/netbox/extras/migrations/0060_customlink_button_class.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0059_exporttemplate_as_attachment'), - ] - - operations = [ - migrations.AlterField( - model_name='customlink', - name='button_class', - field=models.CharField(default='outline-dark', max_length=30), - ), - ] diff --git a/netbox/extras/migrations/0060_squashed_0086.py b/netbox/extras/migrations/0060_squashed_0086.py new file mode 100644 index 000000000..0d5d03008 --- /dev/null +++ b/netbox/extras/migrations/0060_squashed_0086.py @@ -0,0 +1,510 @@ +import re +import uuid + +import django.core.validators +import django.db.models.deletion +import taggit.managers +from django.conf import settings +from django.db import migrations, models + +import extras.fields +import utilities.json + + +class Migration(migrations.Migration): + + replaces = [ + ('extras', '0060_customlink_button_class'), + ('extras', '0061_extras_change_logging'), + ('extras', '0062_clear_secrets_changelog'), + ('extras', '0063_webhook_conditions'), + ('extras', '0064_configrevision'), + ('extras', '0065_imageattachment_change_logging'), + ('extras', '0066_customfield_name_validation'), + ('extras', '0067_customfield_min_max_values'), + ('extras', '0068_configcontext_cluster_types'), + ('extras', '0069_custom_object_field'), + ('extras', '0070_customlink_enabled'), + ('extras', '0071_standardize_id_fields'), + ('extras', '0072_created_datetimefield'), + ('extras', '0073_journalentry_tags_custom_fields'), + ('extras', '0074_customfield_extensions'), + ('extras', '0075_configcontext_locations'), + ('extras', '0076_tag_slug_unicode'), + ('extras', '0077_customlink_extend_text_and_url'), + ('extras', '0078_unique_constraints'), + ('extras', '0079_scheduled_jobs'), + ('extras', '0080_customlink_content_types'), + ('extras', '0081_exporttemplate_content_types'), + ('extras', '0082_savedfilter'), + ('extras', '0083_search'), + ('extras', '0084_staging'), + ('extras', '0085_synced_data'), + ('extras', '0086_configtemplate') + ] + + dependencies = [ + ('virtualization', '0001_squashed_0022'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('core', '0001_initial'), + ('contenttypes', '0002_remove_content_type_name'), + ('wireless', '0008_wirelesslan_status'), + ('dcim', '0166_virtualdevicecontext'), + ('tenancy', '0009_standardize_description_comments'), + ('extras', '0059_exporttemplate_as_attachment'), + ('circuits', '0041_standardize_description_comments'), + ] + + operations = [ + migrations.AlterField( + model_name='customlink', + name='button_class', + field=models.CharField(default='outline-dark', max_length=30), + ), + migrations.AddField( + model_name='customfield', + name='created', + field=models.DateField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name='customfield', + name='last_updated', + field=models.DateTimeField(auto_now=True, null=True), + ), + migrations.AddField( + model_name='customlink', + name='created', + field=models.DateField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name='customlink', + name='last_updated', + field=models.DateTimeField(auto_now=True, null=True), + ), + migrations.AddField( + model_name='exporttemplate', + name='created', + field=models.DateField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name='exporttemplate', + name='last_updated', + field=models.DateTimeField(auto_now=True, null=True), + ), + migrations.AddField( + model_name='webhook', + name='created', + field=models.DateField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name='webhook', + name='last_updated', + field=models.DateTimeField(auto_now=True, null=True), + ), + migrations.AddField( + model_name='webhook', + name='conditions', + field=models.JSONField(blank=True, null=True), + ), + migrations.AddField( + model_name='imageattachment', + name='last_updated', + field=models.DateTimeField(auto_now=True, null=True), + ), + migrations.AlterField( + model_name='customfield', + name='name', + field=models.CharField(max_length=50, unique=True, validators=[django.core.validators.RegexValidator(flags=re.RegexFlag['IGNORECASE'], message='Only alphanumeric characters and underscores are allowed.', regex='^[a-z0-9_]+$'), django.core.validators.RegexValidator(flags=re.RegexFlag['IGNORECASE'], inverse_match=True, message='Double underscores are not permitted in custom field names.', regex='__')]), + ), + migrations.AlterField( + model_name='customfield', + name='validation_maximum', + field=models.IntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='customfield', + name='validation_minimum', + field=models.IntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='configcontext', + name='cluster_types', + field=models.ManyToManyField(blank=True, related_name='+', to='virtualization.clustertype'), + ), + migrations.AddField( + model_name='customfield', + name='object_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype'), + ), + migrations.AddField( + model_name='customlink', + name='enabled', + field=models.BooleanField(default=True), + ), + migrations.AlterField( + model_name='configcontext', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.CreateModel( + name='ConfigRevision', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True)), + ('comment', models.CharField(blank=True, max_length=200)), + ('data', models.JSONField(blank=True, null=True)), + ], + ), + migrations.AlterField( + model_name='customfield', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='customlink', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='exporttemplate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='imageattachment', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='jobresult', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='journalentry', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='objectchange', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='taggeditem', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='webhook', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='imageattachment', + name='object_id', + field=models.PositiveBigIntegerField(), + ), + migrations.AlterField( + model_name='journalentry', + name='assigned_object_id', + field=models.PositiveBigIntegerField(), + ), + migrations.AlterField( + model_name='objectchange', + name='changed_object_id', + field=models.PositiveBigIntegerField(), + ), + migrations.AlterField( + model_name='objectchange', + name='related_object_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='configcontext', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='customfield', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='customlink', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='exporttemplate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='imageattachment', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='journalentry', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='tag', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='webhook', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name='journalentry', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), + migrations.AddField( + model_name='journalentry', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AlterModelOptions( + name='customfield', + options={'ordering': ['group_name', 'weight', 'name']}, + ), + migrations.AddField( + model_name='customfield', + name='group_name', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='customfield', + name='ui_visibility', + field=models.CharField(default='read-write', max_length=50), + ), + migrations.AddField( + model_name='configcontext', + name='locations', + field=models.ManyToManyField(blank=True, related_name='+', to='dcim.location'), + ), + migrations.AlterField( + model_name='tag', + name='slug', + field=models.SlugField(allow_unicode=True, max_length=100, unique=True), + ), + migrations.AlterField( + model_name='customlink', + name='link_text', + field=models.TextField(), + ), + migrations.AlterField( + model_name='customlink', + name='link_url', + field=models.TextField(), + ), + migrations.AlterUniqueTogether( + name='exporttemplate', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='webhook', + unique_together=set(), + ), + migrations.AddConstraint( + model_name='exporttemplate', + constraint=models.UniqueConstraint(fields=('content_type', 'name'), name='extras_exporttemplate_unique_content_type_name'), + ), + migrations.AddConstraint( + model_name='webhook', + constraint=models.UniqueConstraint(fields=('payload_url', 'type_create', 'type_update', 'type_delete'), name='extras_webhook_unique_payload_url_types'), + ), + migrations.AddField( + model_name='jobresult', + name='scheduled', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AddField( + model_name='jobresult', + name='interval', + field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + ), + migrations.AddField( + model_name='jobresult', + name='started', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AlterModelOptions( + name='jobresult', + options={'ordering': ['-created']}, + ), + migrations.AddField( + model_name='customlink', + name='content_types', + field=models.ManyToManyField(related_name='custom_links', to='contenttypes.contenttype'), + ), + migrations.RemoveField( + model_name='customlink', + name='content_type', + ), + migrations.AddField( + model_name='exporttemplate', + name='content_types', + field=models.ManyToManyField(related_name='export_templates', to='contenttypes.contenttype'), + ), + migrations.RemoveConstraint( + model_name='exporttemplate', + name='extras_exporttemplate_unique_content_type_name', + ), + migrations.RemoveField( + model_name='exporttemplate', + name='content_type', + ), + migrations.AlterModelOptions( + name='exporttemplate', + options={'ordering': ('name',)}, + ), + migrations.CreateModel( + name='SavedFilter', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('name', models.CharField(max_length=100, unique=True)), + ('slug', models.SlugField(max_length=100, unique=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('weight', models.PositiveSmallIntegerField(default=100)), + ('enabled', models.BooleanField(default=True)), + ('shared', models.BooleanField(default=True)), + ('parameters', models.JSONField()), + ('content_types', models.ManyToManyField(related_name='saved_filters', to='contenttypes.contenttype')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ('weight', 'name'), + }, + ), + migrations.AddField( + model_name='customfield', + name='search_weight', + field=models.PositiveSmallIntegerField(default=1000), + ), + migrations.CreateModel( + name='CachedValue', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('timestamp', models.DateTimeField(auto_now_add=True)), + ('object_id', models.PositiveBigIntegerField()), + ('field', models.CharField(max_length=200)), + ('type', models.CharField(max_length=30)), + ('value', extras.fields.CachedValueField()), + ('weight', models.PositiveSmallIntegerField(default=1000)), + ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype')), + ], + options={ + 'ordering': ('weight', 'object_type', 'object_id'), + }, + ), + migrations.CreateModel( + name='Branch', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('name', models.CharField(max_length=100, unique=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='StagedChange', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('action', models.CharField(max_length=20)), + ('object_id', models.PositiveBigIntegerField(blank=True, null=True)), + ('data', models.JSONField(blank=True, null=True)), + ('branch', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='staged_changes', to='extras.branch')), + ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype')), + ], + options={ + 'ordering': ('pk',), + }, + ), + migrations.AddField( + model_name='configcontext', + name='data_file', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile'), + ), + migrations.AddField( + model_name='configcontext', + name='data_path', + field=models.CharField(blank=True, editable=False, max_length=1000), + ), + migrations.AddField( + model_name='configcontext', + name='data_source', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource'), + ), + migrations.AddField( + model_name='configcontext', + name='auto_sync_enabled', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='configcontext', + name='data_synced', + field=models.DateTimeField(blank=True, editable=False, null=True), + ), + migrations.AddField( + model_name='exporttemplate', + name='data_file', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile'), + ), + migrations.AddField( + model_name='exporttemplate', + name='data_path', + field=models.CharField(blank=True, editable=False, max_length=1000), + ), + migrations.AddField( + model_name='exporttemplate', + name='data_source', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource'), + ), + migrations.AddField( + model_name='exporttemplate', + name='auto_sync_enabled', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='exporttemplate', + name='data_synced', + field=models.DateTimeField(blank=True, editable=False, null=True), + ), + migrations.CreateModel( + name='ConfigTemplate', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('data_path', models.CharField(blank=True, editable=False, max_length=1000)), + ('data_synced', models.DateTimeField(blank=True, editable=False, null=True)), + ('name', models.CharField(max_length=100)), + ('description', models.CharField(blank=True, max_length=200)), + ('template_code', models.TextField()), + ('environment_params', models.JSONField(blank=True, default=dict, null=True)), + ('data_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile')), + ('data_source', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource')), + ('auto_sync_enabled', models.BooleanField(default=False)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'ordering': ('name',), + }, + ), + ] diff --git a/netbox/extras/migrations/0061_extras_change_logging.py b/netbox/extras/migrations/0061_extras_change_logging.py deleted file mode 100644 index 4ee532fd5..000000000 --- a/netbox/extras/migrations/0061_extras_change_logging.py +++ /dev/null @@ -1,51 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0060_customlink_button_class'), - ] - - operations = [ - migrations.AddField( - model_name='customfield', - name='created', - field=models.DateField(auto_now_add=True, null=True), - ), - migrations.AddField( - model_name='customfield', - name='last_updated', - field=models.DateTimeField(auto_now=True, null=True), - ), - migrations.AddField( - model_name='customlink', - name='created', - field=models.DateField(auto_now_add=True, null=True), - ), - migrations.AddField( - model_name='customlink', - name='last_updated', - field=models.DateTimeField(auto_now=True, null=True), - ), - migrations.AddField( - model_name='exporttemplate', - name='created', - field=models.DateField(auto_now_add=True, null=True), - ), - migrations.AddField( - model_name='exporttemplate', - name='last_updated', - field=models.DateTimeField(auto_now=True, null=True), - ), - migrations.AddField( - model_name='webhook', - name='created', - field=models.DateField(auto_now_add=True, null=True), - ), - migrations.AddField( - model_name='webhook', - name='last_updated', - field=models.DateTimeField(auto_now=True, null=True), - ), - ] diff --git a/netbox/extras/migrations/0062_clear_secrets_changelog.py b/netbox/extras/migrations/0062_clear_secrets_changelog.py deleted file mode 100644 index e76fc8d34..000000000 --- a/netbox/extras/migrations/0062_clear_secrets_changelog.py +++ /dev/null @@ -1,26 +0,0 @@ -from django.db import migrations - - -def clear_secrets_changelog(apps, schema_editor): - """ - Delete all ObjectChange records referencing a model within the old secrets app (pre-v3.0). - """ - ContentType = apps.get_model('contenttypes', 'ContentType') - ObjectChange = apps.get_model('extras', 'ObjectChange') - - content_type_ids = ContentType.objects.filter(app_label='secrets').values_list('id', flat=True) - ObjectChange.objects.filter(changed_object_type__in=content_type_ids).delete() - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0061_extras_change_logging'), - ] - - operations = [ - migrations.RunPython( - code=clear_secrets_changelog, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/extras/migrations/0063_webhook_conditions.py b/netbox/extras/migrations/0063_webhook_conditions.py deleted file mode 100644 index 8cc5b1bd3..000000000 --- a/netbox/extras/migrations/0063_webhook_conditions.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.8 on 2021-10-22 20:37 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0062_clear_secrets_changelog'), - ] - - operations = [ - migrations.AddField( - model_name='webhook', - name='conditions', - field=models.JSONField(blank=True, null=True), - ), - ] diff --git a/netbox/extras/migrations/0064_configrevision.py b/netbox/extras/migrations/0064_configrevision.py deleted file mode 100644 index c3fce8abe..000000000 --- a/netbox/extras/migrations/0064_configrevision.py +++ /dev/null @@ -1,20 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0063_webhook_conditions'), - ] - - operations = [ - migrations.CreateModel( - name='ConfigRevision', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True)), - ('comment', models.CharField(blank=True, max_length=200)), - ('data', models.JSONField(blank=True, null=True)), - ], - ), - ] diff --git a/netbox/extras/migrations/0065_imageattachment_change_logging.py b/netbox/extras/migrations/0065_imageattachment_change_logging.py deleted file mode 100644 index dc623e46c..000000000 --- a/netbox/extras/migrations/0065_imageattachment_change_logging.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0064_configrevision'), - ] - - operations = [ - migrations.AddField( - model_name='imageattachment', - name='last_updated', - field=models.DateTimeField(auto_now=True, null=True), - ), - ] diff --git a/netbox/extras/migrations/0066_customfield_name_validation.py b/netbox/extras/migrations/0066_customfield_name_validation.py deleted file mode 100644 index 3d2c51399..000000000 --- a/netbox/extras/migrations/0066_customfield_name_validation.py +++ /dev/null @@ -1,34 +0,0 @@ -import django.core.validators -from django.db import migrations, models -import re - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0065_imageattachment_change_logging'), - ] - - operations = [ - migrations.AlterField( - model_name='customfield', - name='name', - field=models.CharField( - max_length=50, - unique=True, - validators=[ - django.core.validators.RegexValidator( - flags=re.RegexFlag['IGNORECASE'], - message='Only alphanumeric characters and underscores are allowed.', - regex='^[a-z0-9_]+$', - ), - django.core.validators.RegexValidator( - flags=re.RegexFlag['IGNORECASE'], - inverse_match=True, - message='Double underscores are not permitted in custom field names.', - regex=r'__', - ), - ], - ), - ), - ] diff --git a/netbox/extras/migrations/0067_customfield_min_max_values.py b/netbox/extras/migrations/0067_customfield_min_max_values.py deleted file mode 100644 index cec4f6ae0..000000000 --- a/netbox/extras/migrations/0067_customfield_min_max_values.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0066_customfield_name_validation'), - ] - - operations = [ - migrations.AlterField( - model_name='customfield', - name='validation_maximum', - field=models.IntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='customfield', - name='validation_minimum', - field=models.IntegerField(blank=True, null=True), - ), - ] diff --git a/netbox/extras/migrations/0068_configcontext_cluster_types.py b/netbox/extras/migrations/0068_configcontext_cluster_types.py deleted file mode 100644 index 3d314991d..000000000 --- a/netbox/extras/migrations/0068_configcontext_cluster_types.py +++ /dev/null @@ -1,18 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0145_site_remove_deprecated_fields'), - ('virtualization', '0026_vminterface_bridge'), - ('extras', '0067_customfield_min_max_values'), - ] - - operations = [ - migrations.AddField( - model_name='configcontext', - name='cluster_types', - field=models.ManyToManyField(blank=True, related_name='+', to='virtualization.ClusterType'), - ), - ] diff --git a/netbox/extras/migrations/0069_custom_object_field.py b/netbox/extras/migrations/0069_custom_object_field.py deleted file mode 100644 index 720e21edc..000000000 --- a/netbox/extras/migrations/0069_custom_object_field.py +++ /dev/null @@ -1,18 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('extras', '0068_configcontext_cluster_types'), - ] - - operations = [ - migrations.AddField( - model_name='customfield', - name='object_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype'), - ), - ] diff --git a/netbox/extras/migrations/0070_customlink_enabled.py b/netbox/extras/migrations/0070_customlink_enabled.py deleted file mode 100644 index 839a4dba5..000000000 --- a/netbox/extras/migrations/0070_customlink_enabled.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.11 on 2022-01-10 16:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0069_custom_object_field'), - ] - - operations = [ - migrations.AddField( - model_name='customlink', - name='enabled', - field=models.BooleanField(default=True), - ), - ] diff --git a/netbox/extras/migrations/0071_standardize_id_fields.py b/netbox/extras/migrations/0071_standardize_id_fields.py deleted file mode 100644 index 63e3051d8..000000000 --- a/netbox/extras/migrations/0071_standardize_id_fields.py +++ /dev/null @@ -1,89 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0070_customlink_enabled'), - ] - - operations = [ - # Model IDs - migrations.AlterField( - model_name='configcontext', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='configrevision', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='customfield', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='customlink', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='exporttemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='imageattachment', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='jobresult', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='journalentry', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='objectchange', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='taggeditem', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='webhook', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - - # GFK IDs - migrations.AlterField( - model_name='imageattachment', - name='object_id', - field=models.PositiveBigIntegerField(), - ), - migrations.AlterField( - model_name='journalentry', - name='assigned_object_id', - field=models.PositiveBigIntegerField(), - ), - migrations.AlterField( - model_name='objectchange', - name='changed_object_id', - field=models.PositiveBigIntegerField(), - ), - migrations.AlterField( - model_name='objectchange', - name='related_object_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - ] diff --git a/netbox/extras/migrations/0072_created_datetimefield.py b/netbox/extras/migrations/0072_created_datetimefield.py deleted file mode 100644 index 827e99e54..000000000 --- a/netbox/extras/migrations/0072_created_datetimefield.py +++ /dev/null @@ -1,53 +0,0 @@ -# Generated by Django 4.0.2 on 2022-02-08 18:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0071_standardize_id_fields'), - ] - - operations = [ - migrations.AlterField( - model_name='configcontext', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='customfield', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='customlink', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='exporttemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='imageattachment', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='journalentry', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='tag', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='webhook', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - ] diff --git a/netbox/extras/migrations/0073_journalentry_tags_custom_fields.py b/netbox/extras/migrations/0073_journalentry_tags_custom_fields.py deleted file mode 100644 index 5f2d7f7f3..000000000 --- a/netbox/extras/migrations/0073_journalentry_tags_custom_fields.py +++ /dev/null @@ -1,23 +0,0 @@ -from utilities.json import CustomFieldJSONEncoder -from django.db import migrations, models -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0072_created_datetimefield'), - ] - - operations = [ - migrations.AddField( - model_name='journalentry', - name='custom_field_data', - field=models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder), - ), - migrations.AddField( - model_name='journalentry', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - ] diff --git a/netbox/extras/migrations/0074_customfield_extensions.py b/netbox/extras/migrations/0074_customfield_extensions.py deleted file mode 100644 index 6ca8b958f..000000000 --- a/netbox/extras/migrations/0074_customfield_extensions.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 4.0.4 on 2022-04-15 17:13 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0073_journalentry_tags_custom_fields'), - ] - - operations = [ - migrations.AlterModelOptions( - name='customfield', - options={'ordering': ['group_name', 'weight', 'name']}, - ), - migrations.AddField( - model_name='customfield', - name='group_name', - field=models.CharField(blank=True, max_length=50), - ), - migrations.AddField( - model_name='customfield', - name='ui_visibility', - field=models.CharField(default='read-write', max_length=50), - ), - ] diff --git a/netbox/extras/migrations/0075_configcontext_locations.py b/netbox/extras/migrations/0075_configcontext_locations.py deleted file mode 100644 index 853aec4f7..000000000 --- a/netbox/extras/migrations/0075_configcontext_locations.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.0.5 on 2022-06-22 19:13 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0156_location_status'), - ('extras', '0074_customfield_extensions'), - ] - - operations = [ - migrations.AddField( - model_name='configcontext', - name='locations', - field=models.ManyToManyField(blank=True, related_name='+', to='dcim.location'), - ), - ] diff --git a/netbox/extras/migrations/0076_tag_slug_unicode.py b/netbox/extras/migrations/0076_tag_slug_unicode.py deleted file mode 100644 index 3f4922963..000000000 --- a/netbox/extras/migrations/0076_tag_slug_unicode.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.6 on 2022-07-14 15:51 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0075_configcontext_locations'), - ] - - operations = [ - migrations.AlterField( - model_name='tag', - name='slug', - field=models.SlugField(allow_unicode=True, max_length=100, unique=True), - ), - ] diff --git a/netbox/extras/migrations/0077_customlink_extend_text_and_url.py b/netbox/extras/migrations/0077_customlink_extend_text_and_url.py deleted file mode 100644 index c08948aa6..000000000 --- a/netbox/extras/migrations/0077_customlink_extend_text_and_url.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0076_tag_slug_unicode'), - ] - - operations = [ - migrations.AlterField( - model_name='customlink', - name='link_text', - field=models.TextField(), - ), - migrations.AlterField( - model_name='customlink', - name='link_url', - field=models.TextField(), - ), - ] diff --git a/netbox/extras/migrations/0078_unique_constraints.py b/netbox/extras/migrations/0078_unique_constraints.py deleted file mode 100644 index 4a56831a7..000000000 --- a/netbox/extras/migrations/0078_unique_constraints.py +++ /dev/null @@ -1,27 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0077_customlink_extend_text_and_url'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='exporttemplate', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='webhook', - unique_together=set(), - ), - migrations.AddConstraint( - model_name='exporttemplate', - constraint=models.UniqueConstraint(fields=('content_type', 'name'), name='extras_exporttemplate_unique_content_type_name'), - ), - migrations.AddConstraint( - model_name='webhook', - constraint=models.UniqueConstraint(fields=('payload_url', 'type_create', 'type_update', 'type_delete'), name='extras_webhook_unique_payload_url_types'), - ), - ] diff --git a/netbox/extras/migrations/0079_scheduled_jobs.py b/netbox/extras/migrations/0079_scheduled_jobs.py deleted file mode 100644 index f9f8c6357..000000000 --- a/netbox/extras/migrations/0079_scheduled_jobs.py +++ /dev/null @@ -1,31 +0,0 @@ -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0078_unique_constraints'), - ] - - operations = [ - migrations.AddField( - model_name='jobresult', - name='scheduled', - field=models.DateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='jobresult', - name='interval', - field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), - ), - migrations.AddField( - model_name='jobresult', - name='started', - field=models.DateTimeField(blank=True, null=True), - ), - migrations.AlterModelOptions( - name='jobresult', - options={'ordering': ['-created']}, - ), - ] diff --git a/netbox/extras/migrations/0080_customlink_content_types.py b/netbox/extras/migrations/0080_customlink_content_types.py deleted file mode 100644 index 7f8456c67..000000000 --- a/netbox/extras/migrations/0080_customlink_content_types.py +++ /dev/null @@ -1,32 +0,0 @@ -from django.db import migrations, models - - -def copy_content_types(apps, schema_editor): - CustomLink = apps.get_model('extras', 'CustomLink') - - for customlink in CustomLink.objects.all(): - customlink.content_types.set([customlink.content_type]) - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('extras', '0079_scheduled_jobs'), - ] - - operations = [ - migrations.AddField( - model_name='customlink', - name='content_types', - field=models.ManyToManyField(related_name='custom_links', to='contenttypes.contenttype'), - ), - migrations.RunPython( - code=copy_content_types, - reverse_code=migrations.RunPython.noop - ), - migrations.RemoveField( - model_name='customlink', - name='content_type', - ), - ] diff --git a/netbox/extras/migrations/0081_exporttemplate_content_types.py b/netbox/extras/migrations/0081_exporttemplate_content_types.py deleted file mode 100644 index afa21c5b8..000000000 --- a/netbox/extras/migrations/0081_exporttemplate_content_types.py +++ /dev/null @@ -1,40 +0,0 @@ -from django.db import migrations, models - - -def copy_content_types(apps, schema_editor): - ExportTemplate = apps.get_model('extras', 'ExportTemplate') - - for et in ExportTemplate.objects.all(): - et.content_types.set([et.content_type]) - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('extras', '0080_customlink_content_types'), - ] - - operations = [ - migrations.AddField( - model_name='exporttemplate', - name='content_types', - field=models.ManyToManyField(related_name='export_templates', to='contenttypes.contenttype'), - ), - migrations.RunPython( - code=copy_content_types, - reverse_code=migrations.RunPython.noop - ), - migrations.RemoveConstraint( - model_name='exporttemplate', - name='extras_exporttemplate_unique_content_type_name', - ), - migrations.RemoveField( - model_name='exporttemplate', - name='content_type', - ), - migrations.AlterModelOptions( - name='exporttemplate', - options={'ordering': ('name',)}, - ), - ] diff --git a/netbox/extras/migrations/0082_savedfilter.py b/netbox/extras/migrations/0082_savedfilter.py deleted file mode 100644 index e2626ec6a..000000000 --- a/netbox/extras/migrations/0082_savedfilter.py +++ /dev/null @@ -1,35 +0,0 @@ -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contenttypes', '0002_remove_content_type_name'), - ('extras', '0081_exporttemplate_content_types'), - ] - - operations = [ - migrations.CreateModel( - name='SavedFilter', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('name', models.CharField(max_length=100, unique=True)), - ('slug', models.SlugField(max_length=100, unique=True)), - ('description', models.CharField(blank=True, max_length=200)), - ('weight', models.PositiveSmallIntegerField(default=100)), - ('enabled', models.BooleanField(default=True)), - ('shared', models.BooleanField(default=True)), - ('parameters', models.JSONField()), - ('content_types', models.ManyToManyField(related_name='saved_filters', to='contenttypes.contenttype')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ('weight', 'name'), - }, - ), - ] diff --git a/netbox/extras/migrations/0083_search.py b/netbox/extras/migrations/0083_search.py deleted file mode 100644 index 4c7ae1084..000000000 --- a/netbox/extras/migrations/0083_search.py +++ /dev/null @@ -1,44 +0,0 @@ -import uuid - -import django.db.models.deletion -import django.db.models.lookups -from django.db import migrations, models -import extras.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0041_standardize_description_comments'), - ('contenttypes', '0002_remove_content_type_name'), - ('dcim', '0166_virtualdevicecontext'), - ('extras', '0082_savedfilter'), - ('ipam', '0063_standardize_description_comments'), - ('tenancy', '0009_standardize_description_comments'), - ('virtualization', '0034_standardize_description_comments'), - ('wireless', '0008_wirelesslan_status'), - ] - - operations = [ - migrations.AddField( - model_name='customfield', - name='search_weight', - field=models.PositiveSmallIntegerField(default=1000), - ), - migrations.CreateModel( - name='CachedValue', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('timestamp', models.DateTimeField(auto_now_add=True)), - ('object_id', models.PositiveBigIntegerField()), - ('field', models.CharField(max_length=200)), - ('type', models.CharField(max_length=30)), - ('value', extras.fields.CachedValueField()), - ('weight', models.PositiveSmallIntegerField(default=1000)), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype')), - ], - options={ - 'ordering': ('weight', 'object_type', 'object_id'), - }, - ), - ] diff --git a/netbox/extras/migrations/0084_staging.py b/netbox/extras/migrations/0084_staging.py deleted file mode 100644 index 3129d7f5b..000000000 --- a/netbox/extras/migrations/0084_staging.py +++ /dev/null @@ -1,45 +0,0 @@ -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('extras', '0083_search'), - ] - - operations = [ - migrations.CreateModel( - name='Branch', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('name', models.CharField(max_length=100, unique=True)), - ('description', models.CharField(blank=True, max_length=200)), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ('name',), - }, - ), - migrations.CreateModel( - name='StagedChange', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('action', models.CharField(max_length=20)), - ('object_id', models.PositiveBigIntegerField(blank=True, null=True)), - ('data', models.JSONField(blank=True, null=True)), - ('branch', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='staged_changes', to='extras.branch')), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype')), - ], - options={ - 'ordering': ('pk',), - }, - ), - ] diff --git a/netbox/extras/migrations/0085_synced_data.py b/netbox/extras/migrations/0085_synced_data.py deleted file mode 100644 index 372845490..000000000 --- a/netbox/extras/migrations/0085_synced_data.py +++ /dev/null @@ -1,65 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0001_initial'), - ('extras', '0084_staging'), - ] - - operations = [ - # ConfigContexts - migrations.AddField( - model_name='configcontext', - name='data_file', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile'), - ), - migrations.AddField( - model_name='configcontext', - name='data_path', - field=models.CharField(blank=True, editable=False, max_length=1000), - ), - migrations.AddField( - model_name='configcontext', - name='data_source', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource'), - ), - migrations.AddField( - model_name='configcontext', - name='auto_sync_enabled', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='configcontext', - name='data_synced', - field=models.DateTimeField(blank=True, editable=False, null=True), - ), - # ExportTemplates - migrations.AddField( - model_name='exporttemplate', - name='data_file', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile'), - ), - migrations.AddField( - model_name='exporttemplate', - name='data_path', - field=models.CharField(blank=True, editable=False, max_length=1000), - ), - migrations.AddField( - model_name='exporttemplate', - name='data_source', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource'), - ), - migrations.AddField( - model_name='exporttemplate', - name='auto_sync_enabled', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='exporttemplate', - name='data_synced', - field=models.DateTimeField(blank=True, editable=False, null=True), - ), - ] diff --git a/netbox/extras/migrations/0086_configtemplate.py b/netbox/extras/migrations/0086_configtemplate.py deleted file mode 100644 index 32d4e9858..000000000 --- a/netbox/extras/migrations/0086_configtemplate.py +++ /dev/null @@ -1,35 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0001_initial'), - ('extras', '0085_synced_data'), - ] - - operations = [ - migrations.CreateModel( - name='ConfigTemplate', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('data_path', models.CharField(blank=True, editable=False, max_length=1000)), - ('data_synced', models.DateTimeField(blank=True, editable=False, null=True)), - ('name', models.CharField(max_length=100)), - ('description', models.CharField(blank=True, max_length=200)), - ('template_code', models.TextField()), - ('environment_params', models.JSONField(blank=True, default=dict, null=True)), - ('data_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile')), - ('data_source', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource')), - ('auto_sync_enabled', models.BooleanField(default=False)), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ], - options={ - 'ordering': ('name',), - }, - ), - ] diff --git a/netbox/extras/migrations/0087_dashboard.py b/netbox/extras/migrations/0087_dashboard.py deleted file mode 100644 index 0c048c5ef..000000000 --- a/netbox/extras/migrations/0087_dashboard.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 4.1.7 on 2023-02-24 00:56 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('extras', '0086_configtemplate'), - ] - - operations = [ - migrations.CreateModel( - name='Dashboard', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('layout', models.JSONField(default=list)), - ('config', models.JSONField(default=dict)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='dashboard', to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/netbox/extras/migrations/0087_squashed_0098.py b/netbox/extras/migrations/0087_squashed_0098.py new file mode 100644 index 000000000..57ad3af00 --- /dev/null +++ b/netbox/extras/migrations/0087_squashed_0098.py @@ -0,0 +1,156 @@ +import django.contrib.postgres.fields +import django.db.models.deletion +import taggit.managers +from django.conf import settings +from django.db import migrations, models + +import extras.models.mixins +import utilities.json + + +class Migration(migrations.Migration): + + replaces = [ + ('extras', '0087_dashboard'), + ('extras', '0088_jobresult_webhooks'), + ('extras', '0089_customfield_is_cloneable'), + ('extras', '0090_objectchange_index_request_id'), + ('extras', '0091_create_managedfiles'), + ('extras', '0092_delete_jobresult'), + ('extras', '0093_configrevision_ordering'), + ('extras', '0094_tag_object_types'), + ('extras', '0095_bookmarks'), + ('extras', '0096_customfieldchoiceset'), + ('extras', '0097_customfield_remove_choices'), + ('extras', '0098_webhook_custom_field_data_webhook_tags') + ] + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('extras', '0086_configtemplate'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('core', '0002_managedfile'), + ] + + operations = [ + migrations.CreateModel( + name='Dashboard', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('layout', models.JSONField(default=list)), + ('config', models.JSONField(default=dict)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='dashboard', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AddField( + model_name='webhook', + name='type_job_end', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='webhook', + name='type_job_start', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='customfield', + name='is_cloneable', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='objectchange', + name='request_id', + field=models.UUIDField(db_index=True, editable=False), + ), + migrations.CreateModel( + name='ReportModule', + fields=[ + ], + options={ + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=(extras.models.mixins.PythonModuleMixin, 'core.managedfile', models.Model), + ), + migrations.CreateModel( + name='ScriptModule', + fields=[ + ], + options={ + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=(extras.models.mixins.PythonModuleMixin, 'core.managedfile', models.Model), + ), + migrations.DeleteModel( + name='JobResult', + ), + migrations.AlterModelOptions( + name='configrevision', + options={'ordering': ['-created']}, + ), + migrations.AddField( + model_name='tag', + name='object_types', + field=models.ManyToManyField(blank=True, related_name='+', to='contenttypes.contenttype'), + ), + migrations.RenameIndex( + model_name='taggeditem', + new_name='extras_tagg_content_717743_idx', + old_fields=('content_type', 'object_id'), + ), + migrations.CreateModel( + name='Bookmark', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True)), + ('object_id', models.PositiveBigIntegerField()), + ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ('created', 'pk'), + }, + ), + migrations.AddConstraint( + model_name='bookmark', + constraint=models.UniqueConstraint(fields=('object_type', 'object_id', 'user'), name='extras_bookmark_unique_per_object_and_user'), + ), + migrations.CreateModel( + name='CustomFieldChoiceSet', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('name', models.CharField(max_length=100, unique=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('base_choices', models.CharField(blank=True, max_length=50)), + ('extra_choices', django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), size=2), blank=True, null=True, size=None)), + ('order_alphabetically', models.BooleanField(default=False)), + ], + options={ + 'ordering': ('name',), + }, + ), + migrations.AddField( + model_name='customfield', + name='choice_set', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='choices_for', to='extras.customfieldchoiceset'), + ), + migrations.RemoveField( + model_name='customfield', + name='choices', + ), + migrations.AddField( + model_name='webhook', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), + migrations.AddField( + model_name='webhook', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + ] diff --git a/netbox/extras/migrations/0088_jobresult_webhooks.py b/netbox/extras/migrations/0088_jobresult_webhooks.py deleted file mode 100644 index 112bcca8c..000000000 --- a/netbox/extras/migrations/0088_jobresult_webhooks.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.1.7 on 2023-02-28 19:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0087_dashboard'), - ] - - operations = [ - migrations.AddField( - model_name='webhook', - name='type_job_end', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='webhook', - name='type_job_start', - field=models.BooleanField(default=False), - ), - ] diff --git a/netbox/extras/migrations/0089_customfield_is_cloneable.py b/netbox/extras/migrations/0089_customfield_is_cloneable.py deleted file mode 100644 index 7f577b45a..000000000 --- a/netbox/extras/migrations/0089_customfield_is_cloneable.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.2 on 2022-11-17 18:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0088_jobresult_webhooks'), - ] - - operations = [ - migrations.AddField( - model_name='customfield', - name='is_cloneable', - field=models.BooleanField(default=False), - ), - ] diff --git a/netbox/extras/migrations/0090_objectchange_index_request_id.py b/netbox/extras/migrations/0090_objectchange_index_request_id.py deleted file mode 100644 index 00e8fde42..000000000 --- a/netbox/extras/migrations/0090_objectchange_index_request_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.7 on 2023-03-16 20:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0089_customfield_is_cloneable'), - ] - - operations = [ - migrations.AlterField( - model_name='objectchange', - name='request_id', - field=models.UUIDField(db_index=True, editable=False), - ), - ] diff --git a/netbox/extras/migrations/0091_create_managedfiles.py b/netbox/extras/migrations/0091_create_managedfiles.py deleted file mode 100644 index 79a80821f..000000000 --- a/netbox/extras/migrations/0091_create_managedfiles.py +++ /dev/null @@ -1,79 +0,0 @@ -import os -import pkgutil - -from django.conf import settings -from django.db import migrations, models -import extras.models.mixins - - -def create_files(cls, root_name, root_path): - - modules = list(pkgutil.iter_modules([root_path])) - filenames = [] - for importer, module_name, ispkg in modules: - try: - module = importer.find_module(module_name).load_module(module_name) - rel_path = os.path.relpath(module.__file__, root_path) - filenames.append(rel_path) - except ImportError: - pass - - managed_files = [ - cls(file_root=root_name, file_path=filename) - for filename in filenames - ] - cls.objects.bulk_create(managed_files) - - -def replicate_scripts(apps, schema_editor): - ScriptModule = apps.get_model('extras', 'ScriptModule') - create_files(ScriptModule, 'scripts', settings.SCRIPTS_ROOT) - - -def replicate_reports(apps, schema_editor): - ReportModule = apps.get_model('extras', 'ReportModule') - create_files(ReportModule, 'reports', settings.REPORTS_ROOT) - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0002_managedfile'), - ('extras', '0090_objectchange_index_request_id'), - ] - - operations = [ - # Create proxy models - migrations.CreateModel( - name='ReportModule', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=(extras.models.mixins.PythonModuleMixin, 'core.managedfile', models.Model), - ), - migrations.CreateModel( - name='ScriptModule', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=(extras.models.mixins.PythonModuleMixin, 'core.managedfile', models.Model), - ), - - # Instantiate ManagedFiles to represent scripts & reports - migrations.RunPython( - code=replicate_scripts, - reverse_code=migrations.RunPython.noop - ), - migrations.RunPython( - code=replicate_reports, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/extras/migrations/0092_delete_jobresult.py b/netbox/extras/migrations/0092_delete_jobresult.py deleted file mode 100644 index c1b121c69..000000000 --- a/netbox/extras/migrations/0092_delete_jobresult.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 4.1.7 on 2023-03-27 17:31 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0091_create_managedfiles'), - ] - - operations = [ - migrations.DeleteModel( - name='JobResult', - ), - ] diff --git a/netbox/extras/migrations/0093_configrevision_ordering.py b/netbox/extras/migrations/0093_configrevision_ordering.py deleted file mode 100644 index a4e875e6d..000000000 --- a/netbox/extras/migrations/0093_configrevision_ordering.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.1.9 on 2023-06-22 14:14 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0092_delete_jobresult'), - ] - - operations = [ - migrations.AlterModelOptions( - name='configrevision', - options={'ordering': ['-created']}, - ), - ] diff --git a/netbox/extras/migrations/0094_tag_object_types.py b/netbox/extras/migrations/0094_tag_object_types.py deleted file mode 100644 index 8bb760980..000000000 --- a/netbox/extras/migrations/0094_tag_object_types.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('extras', '0093_configrevision_ordering'), - ] - - operations = [ - migrations.AddField( - model_name='tag', - name='object_types', - field=models.ManyToManyField(blank=True, related_name='+', to='contenttypes.contenttype'), - ), - migrations.RenameIndex( - model_name='taggeditem', - new_name='extras_tagg_content_717743_idx', - old_fields=('content_type', 'object_id'), - ), - ] diff --git a/netbox/extras/migrations/0095_bookmarks.py b/netbox/extras/migrations/0095_bookmarks.py deleted file mode 100644 index 54c14c496..000000000 --- a/netbox/extras/migrations/0095_bookmarks.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 4.1.9 on 2023-06-29 14:07 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contenttypes', '0002_remove_content_type_name'), - ('extras', '0094_tag_object_types'), - ] - - operations = [ - migrations.CreateModel( - name='Bookmark', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True)), - ('object_id', models.PositiveBigIntegerField()), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ('created', 'pk'), - }, - ), - migrations.AddConstraint( - model_name='bookmark', - constraint=models.UniqueConstraint(fields=('object_type', 'object_id', 'user'), name='extras_bookmark_unique_per_object_and_user'), - ), - ] diff --git a/netbox/extras/migrations/0096_customfieldchoiceset.py b/netbox/extras/migrations/0096_customfieldchoiceset.py deleted file mode 100644 index 1984e17f8..000000000 --- a/netbox/extras/migrations/0096_customfieldchoiceset.py +++ /dev/null @@ -1,62 +0,0 @@ -import django.contrib.postgres.fields -from django.db import migrations, models - -from extras.choices import CustomFieldTypeChoices - - -def create_choice_sets(apps, schema_editor): - """ - Create a CustomFieldChoiceSet for each CustomField with choices defined. - """ - CustomField = apps.get_model('extras', 'CustomField') - CustomFieldChoiceSet = apps.get_model('extras', 'CustomFieldChoiceSet') - - # Create custom field choice sets - choice_fields = CustomField.objects.filter( - type__in=(CustomFieldTypeChoices.TYPE_SELECT, CustomFieldTypeChoices.TYPE_MULTISELECT), - choices__len__gt=0 - ) - for cf in choice_fields: - choiceset = CustomFieldChoiceSet.objects.create( - name=f'{cf.name} Choices', - extra_choices=tuple(zip(cf.choices, cf.choices)) # Convert list to tuple of two-tuples - ) - cf.choice_set = choiceset - - # Update custom fields to point to new choice sets - CustomField.objects.bulk_update(choice_fields, ['choice_set']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0095_bookmarks'), - ] - - operations = [ - migrations.CreateModel( - name='CustomFieldChoiceSet', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('name', models.CharField(max_length=100, unique=True)), - ('description', models.CharField(blank=True, max_length=200)), - ('base_choices', models.CharField(blank=True, max_length=50)), - ('extra_choices', django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), size=2), blank=True, null=True, size=None)), - ('order_alphabetically', models.BooleanField(default=False)), - ], - options={ - 'ordering': ('name',), - }, - ), - migrations.AddField( - model_name='customfield', - name='choice_set', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='choices_for', to='extras.customfieldchoiceset'), - ), - migrations.RunPython( - code=create_choice_sets, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/extras/migrations/0097_customfield_remove_choices.py b/netbox/extras/migrations/0097_customfield_remove_choices.py deleted file mode 100644 index f3e8c547e..000000000 --- a/netbox/extras/migrations/0097_customfield_remove_choices.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.1.10 on 2023-07-17 15:22 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0096_customfieldchoiceset'), - ] - - operations = [ - migrations.RemoveField( - model_name='customfield', - name='choices', - ), - ] diff --git a/netbox/extras/migrations/0098_webhook_custom_field_data_webhook_tags.py b/netbox/extras/migrations/0098_webhook_custom_field_data_webhook_tags.py deleted file mode 100644 index 3fd294388..000000000 --- a/netbox/extras/migrations/0098_webhook_custom_field_data_webhook_tags.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 4.1.10 on 2023-08-01 16:32 - -from django.db import migrations, models -import taggit.managers -import utilities.json - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0097_customfield_remove_choices'), - ] - - operations = [ - migrations.AddField( - model_name='webhook', - name='custom_field_data', - field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), - ), - migrations.AddField( - model_name='webhook', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - ] diff --git a/netbox/ipam/migrations/0047_prefix_depth_children.py b/netbox/ipam/migrations/0047_prefix_depth_children.py deleted file mode 100644 index 4c49b1358..000000000 --- a/netbox/ipam/migrations/0047_prefix_depth_children.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0046_set_vlangroup_scope_types'), - ] - - operations = [ - migrations.AddField( - model_name='prefix', - name='_children', - field=models.PositiveBigIntegerField(default=0, editable=False), - ), - migrations.AddField( - model_name='prefix', - name='_depth', - field=models.PositiveSmallIntegerField(default=0, editable=False), - ), - ] diff --git a/netbox/ipam/migrations/0047_squashed_0053.py b/netbox/ipam/migrations/0047_squashed_0053.py new file mode 100644 index 000000000..470261316 --- /dev/null +++ b/netbox/ipam/migrations/0047_squashed_0053.py @@ -0,0 +1,143 @@ +import django.core.validators +import django.db.models.deletion +import taggit.managers +from django.db import migrations, models + +import ipam.fields +import utilities.json + + +class Migration(migrations.Migration): + + replaces = [ + ('ipam', '0047_prefix_depth_children'), + ('ipam', '0048_prefix_populate_depth_children'), + ('ipam', '0049_prefix_mark_utilized'), + ('ipam', '0050_iprange'), + ('ipam', '0051_extend_tag_support'), + ('ipam', '0052_fhrpgroup'), + ('ipam', '0053_asn_model') + ] + + dependencies = [ + ('ipam', '0046_set_vlangroup_scope_types'), + ('tenancy', '0001_squashed_0012'), + ('extras', '0002_squashed_0059'), + ('contenttypes', '0002_remove_content_type_name'), + ] + + operations = [ + migrations.AddField( + model_name='prefix', + name='_children', + field=models.PositiveBigIntegerField(default=0, editable=False), + ), + migrations.AddField( + model_name='prefix', + name='_depth', + field=models.PositiveSmallIntegerField(default=0, editable=False), + ), + migrations.AddField( + model_name='prefix', + name='mark_utilized', + field=models.BooleanField(default=False), + ), + migrations.CreateModel( + name='IPRange', + fields=[ + ('created', models.DateField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('start_address', ipam.fields.IPAddressField()), + ('end_address', ipam.fields.IPAddressField()), + ('size', models.PositiveIntegerField(editable=False)), + ('status', models.CharField(default='active', max_length=50)), + ('description', models.CharField(blank=True, max_length=200)), + ('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ip_ranges', to='ipam.role')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='ip_ranges', to='tenancy.tenant')), + ('vrf', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='ip_ranges', to='ipam.vrf')), + ], + options={ + 'verbose_name': 'IP range', + 'verbose_name_plural': 'IP ranges', + 'ordering': (models.OrderBy(models.F('vrf'), nulls_first=True), 'start_address', 'pk'), + }, + ), + migrations.AddField( + model_name='rir', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='role', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='vlangroup', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.CreateModel( + name='FHRPGroup', + fields=[ + ('created', models.DateField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('group_id', models.PositiveSmallIntegerField()), + ('protocol', models.CharField(max_length=50)), + ('auth_type', models.CharField(blank=True, max_length=50)), + ('auth_key', models.CharField(blank=True, max_length=255)), + ('description', models.CharField(blank=True, max_length=200)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'verbose_name': 'FHRP group', + 'ordering': ['protocol', 'group_id', 'pk'], + }, + ), + migrations.AlterField( + model_name='ipaddress', + name='assigned_object_type', + field=models.ForeignKey(blank=True, limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'dcim'), ('model', 'interface')), models.Q(('app_label', 'ipam'), ('model', 'fhrpgroup')), models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), _connector='OR')), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype'), + ), + migrations.CreateModel( + name='FHRPGroupAssignment', + fields=[ + ('created', models.DateField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('interface_id', models.PositiveIntegerField()), + ('priority', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(255)])), + ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ipam.fhrpgroup')), + ('interface_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ], + options={ + 'verbose_name': 'FHRP group assignment', + 'ordering': ('-priority', 'pk'), + 'unique_together': {('interface_type', 'interface_id', 'group')}, + }, + ), + migrations.CreateModel( + name='ASN', + fields=[ + ('created', models.DateField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('asn', ipam.fields.ASNField(unique=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('rir', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='asns', to='ipam.rir')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='asns', to='tenancy.tenant')), + ], + options={ + 'verbose_name': 'ASN', + 'verbose_name_plural': 'ASNs', + 'ordering': ['asn'], + }, + ), + ] diff --git a/netbox/ipam/migrations/0048_prefix_populate_depth_children.py b/netbox/ipam/migrations/0048_prefix_populate_depth_children.py deleted file mode 100644 index 5ec448ee1..000000000 --- a/netbox/ipam/migrations/0048_prefix_populate_depth_children.py +++ /dev/null @@ -1,37 +0,0 @@ -import sys -from django.db import migrations - -from ipam.utils import rebuild_prefixes - - -def populate_prefix_hierarchy(apps, schema_editor): - """ - Populate _depth and _children attrs for all Prefixes. - """ - Prefix = apps.get_model('ipam', 'Prefix') - VRF = apps.get_model('ipam', 'VRF') - - total_count = Prefix.objects.count() - if 'test' not in sys.argv: - print(f'\nUpdating {total_count} prefixes...') - - # Rebuild the global table - rebuild_prefixes(None) - - # Iterate through all VRFs, rebuilding each - for vrf in VRF.objects.all(): - rebuild_prefixes(vrf.pk) - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0047_prefix_depth_children'), - ] - - operations = [ - migrations.RunPython( - code=populate_prefix_hierarchy, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/ipam/migrations/0049_prefix_mark_utilized.py b/netbox/ipam/migrations/0049_prefix_mark_utilized.py deleted file mode 100644 index 4274d92a0..000000000 --- a/netbox/ipam/migrations/0049_prefix_mark_utilized.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0048_prefix_populate_depth_children'), - ] - - operations = [ - migrations.AddField( - model_name='prefix', - name='mark_utilized', - field=models.BooleanField(default=False), - ), - ] diff --git a/netbox/ipam/migrations/0050_iprange.py b/netbox/ipam/migrations/0050_iprange.py deleted file mode 100644 index 374b2547c..000000000 --- a/netbox/ipam/migrations/0050_iprange.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 3.2.5 on 2021-07-16 14:15 - -from utilities.json import CustomFieldJSONEncoder -from django.db import migrations, models -import django.db.models.deletion -import django.db.models.expressions -import ipam.fields -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0061_extras_change_logging'), - ('tenancy', '0001_squashed_0012'), - ('ipam', '0049_prefix_mark_utilized'), - ] - - operations = [ - migrations.CreateModel( - name='IPRange', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('start_address', ipam.fields.IPAddressField()), - ('end_address', ipam.fields.IPAddressField()), - ('size', models.PositiveIntegerField(editable=False)), - ('status', models.CharField(default='active', max_length=50)), - ('description', models.CharField(blank=True, max_length=200)), - ('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ip_ranges', to='ipam.role')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='ip_ranges', to='tenancy.tenant')), - ('vrf', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='ip_ranges', to='ipam.vrf')), - ], - options={ - 'verbose_name': 'IP range', - 'verbose_name_plural': 'IP ranges', - 'ordering': (django.db.models.expressions.OrderBy(django.db.models.expressions.F('vrf'), nulls_first=True), 'start_address', 'pk'), - }, - ), - ] diff --git a/netbox/ipam/migrations/0051_extend_tag_support.py b/netbox/ipam/migrations/0051_extend_tag_support.py deleted file mode 100644 index ea31a6645..000000000 --- a/netbox/ipam/migrations/0051_extend_tag_support.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.8 on 2021-10-21 14:50 - -from django.db import migrations -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0062_clear_secrets_changelog'), - ('ipam', '0050_iprange'), - ] - - operations = [ - migrations.AddField( - model_name='rir', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='role', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='vlangroup', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - ] diff --git a/netbox/ipam/migrations/0052_fhrpgroup.py b/netbox/ipam/migrations/0052_fhrpgroup.py deleted file mode 100644 index e69e49d48..000000000 --- a/netbox/ipam/migrations/0052_fhrpgroup.py +++ /dev/null @@ -1,58 +0,0 @@ -from utilities.json import CustomFieldJSONEncoder -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('extras', '0064_configrevision'), - ('ipam', '0051_extend_tag_support'), - ] - - operations = [ - migrations.CreateModel( - name='FHRPGroup', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('group_id', models.PositiveSmallIntegerField()), - ('protocol', models.CharField(max_length=50)), - ('auth_type', models.CharField(blank=True, max_length=50)), - ('auth_key', models.CharField(blank=True, max_length=255)), - ('description', models.CharField(blank=True, max_length=200)), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ], - options={ - 'verbose_name': 'FHRP group', - 'ordering': ['protocol', 'group_id', 'pk'], - }, - ), - migrations.AlterField( - model_name='ipaddress', - name='assigned_object_type', - field=models.ForeignKey(blank=True, limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'dcim'), ('model', 'interface')), models.Q(('app_label', 'ipam'), ('model', 'fhrpgroup')), models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), _connector='OR')), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype'), - ), - migrations.CreateModel( - name='FHRPGroupAssignment', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('interface_id', models.PositiveIntegerField()), - ('priority', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(255)])), - ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ipam.fhrpgroup')), - ('interface_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), - ], - options={ - 'verbose_name': 'FHRP group assignment', - 'ordering': ('-priority', 'pk'), - 'unique_together': {('interface_type', 'interface_id', 'group')}, - }, - ), - ] diff --git a/netbox/ipam/migrations/0053_asn_model.py b/netbox/ipam/migrations/0053_asn_model.py deleted file mode 100644 index 99bde12e6..000000000 --- a/netbox/ipam/migrations/0053_asn_model.py +++ /dev/null @@ -1,36 +0,0 @@ -import ipam.fields -from utilities.json import CustomFieldJSONEncoder -from django.db import migrations, models -import django.db.models.deletion -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0004_extend_tag_support'), - ('extras', '0064_configrevision'), - ('ipam', '0052_fhrpgroup'), - ] - - operations = [ - migrations.CreateModel( - name='ASN', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('asn', ipam.fields.ASNField(unique=True)), - ('description', models.CharField(blank=True, max_length=200)), - ('rir', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='asns', to='ipam.rir')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='asns', to='tenancy.tenant')), - ], - options={ - 'verbose_name': 'ASN', - 'verbose_name_plural': 'ASNs', - 'ordering': ['asn'], - }, - ), - ] diff --git a/netbox/ipam/migrations/0054_squashed_0067.py b/netbox/ipam/migrations/0054_squashed_0067.py new file mode 100644 index 000000000..40073ca29 --- /dev/null +++ b/netbox/ipam/migrations/0054_squashed_0067.py @@ -0,0 +1,393 @@ +import django.contrib.postgres.fields +import django.core.validators +import django.db.models.functions.comparison +import taggit.managers +from django.db import migrations, models + +import ipam.fields +import ipam.lookups +import utilities.json + + +class Migration(migrations.Migration): + + replaces = [ + ('ipam', '0054_vlangroup_min_max_vids'), + ('ipam', '0055_servicetemplate'), + ('ipam', '0056_standardize_id_fields'), + ('ipam', '0057_created_datetimefield'), + ('ipam', '0058_ipaddress_nat_inside_nonunique'), + ('ipam', '0059_l2vpn'), + ('ipam', '0060_alter_l2vpn_slug'), + ('ipam', '0061_fhrpgroup_name'), + ('ipam', '0062_unique_constraints'), + ('ipam', '0063_standardize_description_comments'), + ('ipam', '0064_clear_search_cache'), + ('ipam', '0065_asnrange'), + ('ipam', '0066_iprange_mark_utilized'), + ('ipam', '0067_ipaddress_index_host') + ] + + dependencies = [ + ('tenancy', '0007_contact_link'), + ('contenttypes', '0002_remove_content_type_name'), + ('extras', '0060_squashed_0086'), + ('ipam', '0053_asn_model'), + ('tenancy', '0009_standardize_description_comments'), + ] + + operations = [ + migrations.AddField( + model_name='vlangroup', + name='max_vid', + field=models.PositiveSmallIntegerField(default=4094, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(4094)]), + ), + migrations.AddField( + model_name='vlangroup', + name='min_vid', + field=models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(4094)]), + ), + migrations.AlterField( + model_name='aggregate', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='asn', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='fhrpgroup', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='fhrpgroupassignment', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='ipaddress', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='iprange', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='prefix', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='rir', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='role', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='routetarget', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='service', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='vlan', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='vlangroup', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='vrf', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='fhrpgroupassignment', + name='interface_id', + field=models.PositiveBigIntegerField(), + ), + migrations.AlterField( + model_name='ipaddress', + name='assigned_object_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='aggregate', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='asn', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='fhrpgroup', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='fhrpgroupassignment', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='ipaddress', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='iprange', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='prefix', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='rir', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='role', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='routetarget', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='service', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.CreateModel( + name='ServiceTemplate', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('protocol', models.CharField(max_length=50)), + ('ports', django.contrib.postgres.fields.ArrayField(base_field=models.PositiveIntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(65535)]), size=None)), + ('description', models.CharField(blank=True, max_length=200)), + ('name', models.CharField(max_length=100, unique=True)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'ordering': ('name',), + }, + ), + migrations.AlterField( + model_name='vlan', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='vlangroup', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='vrf', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='ipaddress', + name='nat_inside', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='nat_outside', to='ipam.ipaddress'), + ), + migrations.CreateModel( + name='L2VPN', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('name', models.CharField(max_length=100, unique=True)), + ('slug', models.SlugField(max_length=100, unique=True)), + ('type', models.CharField(max_length=50)), + ('identifier', models.BigIntegerField(blank=True, null=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('export_targets', models.ManyToManyField(blank=True, related_name='exporting_l2vpns', to='ipam.routetarget')), + ('import_targets', models.ManyToManyField(blank=True, related_name='importing_l2vpns', to='ipam.routetarget')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='l2vpns', to='tenancy.tenant')), + ], + options={ + 'verbose_name': 'L2VPN', + 'ordering': ('name', 'identifier'), + }, + ), + migrations.CreateModel( + name='L2VPNTermination', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('assigned_object_id', models.PositiveBigIntegerField()), + ('assigned_object_type', models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'dcim'), ('model', 'interface')), models.Q(('app_label', 'ipam'), ('model', 'vlan')), models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), _connector='OR')), on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), + ('l2vpn', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='ipam.l2vpn')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'verbose_name': 'L2VPN termination', + 'ordering': ('l2vpn',), + }, + ), + migrations.AddConstraint( + model_name='l2vpntermination', + constraint=models.UniqueConstraint(fields=('assigned_object_type', 'assigned_object_id'), name='ipam_l2vpntermination_assigned_object'), + ), + migrations.AddField( + model_name='fhrpgroup', + name='name', + field=models.CharField(blank=True, max_length=100), + ), + migrations.AlterUniqueTogether( + name='fhrpgroupassignment', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='vlan', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='vlangroup', + unique_together=set(), + ), + migrations.AddConstraint( + model_name='fhrpgroupassignment', + constraint=models.UniqueConstraint(fields=('interface_type', 'interface_id', 'group'), name='ipam_fhrpgroupassignment_unique_interface_group'), + ), + migrations.AddConstraint( + model_name='vlan', + constraint=models.UniqueConstraint(fields=('group', 'vid'), name='ipam_vlan_unique_group_vid'), + ), + migrations.AddConstraint( + model_name='vlan', + constraint=models.UniqueConstraint(fields=('group', 'name'), name='ipam_vlan_unique_group_name'), + ), + migrations.AddConstraint( + model_name='vlangroup', + constraint=models.UniqueConstraint(fields=('scope_type', 'scope_id', 'name'), name='ipam_vlangroup_unique_scope_name'), + ), + migrations.AddConstraint( + model_name='vlangroup', + constraint=models.UniqueConstraint(fields=('scope_type', 'scope_id', 'slug'), name='ipam_vlangroup_unique_scope_slug'), + ), + migrations.AddField( + model_name='aggregate', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='asn', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='fhrpgroup', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='ipaddress', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='iprange', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='l2vpn', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='prefix', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='routetarget', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='service', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='servicetemplate', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='vlan', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='vrf', + name='comments', + field=models.TextField(blank=True), + ), + migrations.CreateModel( + name='ASNRange', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('description', models.CharField(blank=True, max_length=200)), + ('name', models.CharField(max_length=100, unique=True)), + ('slug', models.SlugField(max_length=100, unique=True)), + ('start', ipam.fields.ASNField()), + ('end', ipam.fields.ASNField()), + ('rir', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='asn_ranges', to='ipam.rir')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='asn_ranges', to='tenancy.tenant')), + ], + options={ + 'verbose_name': 'ASN range', + 'verbose_name_plural': 'ASN ranges', + 'ordering': ('name',), + }, + ), + migrations.AddField( + model_name='iprange', + name='mark_utilized', + field=models.BooleanField(default=False), + ), + migrations.AddIndex( + model_name='ipaddress', + index=models.Index(django.db.models.functions.comparison.Cast(ipam.lookups.Host('address'), output_field=ipam.fields.IPAddressField()), name='ipam_ipaddress_host'), + ), + ] diff --git a/netbox/ipam/migrations/0054_vlangroup_min_max_vids.py b/netbox/ipam/migrations/0054_vlangroup_min_max_vids.py deleted file mode 100644 index 7b901fe13..000000000 --- a/netbox/ipam/migrations/0054_vlangroup_min_max_vids.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.2.10 on 2021-12-23 15:24 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0145_site_remove_deprecated_fields'), - ('ipam', '0053_asn_model'), - ] - - operations = [ - migrations.AddField( - model_name='vlangroup', - name='max_vid', - field=models.PositiveSmallIntegerField(default=4094, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(4094)]), - ), - migrations.AddField( - model_name='vlangroup', - name='min_vid', - field=models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(4094)]), - ), - ] diff --git a/netbox/ipam/migrations/0055_servicetemplate.py b/netbox/ipam/migrations/0055_servicetemplate.py deleted file mode 100644 index c8ba6645c..000000000 --- a/netbox/ipam/migrations/0055_servicetemplate.py +++ /dev/null @@ -1,33 +0,0 @@ -import django.contrib.postgres.fields -from utilities.json import CustomFieldJSONEncoder -import django.core.validators -from django.db import migrations, models -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0070_customlink_enabled'), - ('ipam', '0054_vlangroup_min_max_vids'), - ] - - operations = [ - migrations.CreateModel( - name='ServiceTemplate', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('protocol', models.CharField(max_length=50)), - ('ports', django.contrib.postgres.fields.ArrayField(base_field=models.PositiveIntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(65535)]), size=None)), - ('description', models.CharField(blank=True, max_length=200)), - ('name', models.CharField(max_length=100, unique=True)), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ], - options={ - 'ordering': ('name',), - }, - ), - ] diff --git a/netbox/ipam/migrations/0056_standardize_id_fields.py b/netbox/ipam/migrations/0056_standardize_id_fields.py deleted file mode 100644 index cb7564450..000000000 --- a/netbox/ipam/migrations/0056_standardize_id_fields.py +++ /dev/null @@ -1,99 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0055_servicetemplate'), - ] - - operations = [ - # Model IDs - migrations.AlterField( - model_name='aggregate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='asn', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='fhrpgroup', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='fhrpgroupassignment', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='ipaddress', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='iprange', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='prefix', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='rir', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='role', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='routetarget', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='service', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='servicetemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='vlan', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='vlangroup', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='vrf', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - - # GFK IDs - migrations.AlterField( - model_name='fhrpgroupassignment', - name='interface_id', - field=models.PositiveBigIntegerField(), - ), - migrations.AlterField( - model_name='ipaddress', - name='assigned_object_id', - field=models.PositiveBigIntegerField(blank=True, null=True), - ), - ] diff --git a/netbox/ipam/migrations/0057_created_datetimefield.py b/netbox/ipam/migrations/0057_created_datetimefield.py deleted file mode 100644 index f2ca7ab95..000000000 --- a/netbox/ipam/migrations/0057_created_datetimefield.py +++ /dev/null @@ -1,88 +0,0 @@ -# Generated by Django 4.0.2 on 2022-02-08 18:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0056_standardize_id_fields'), - ] - - operations = [ - migrations.AlterField( - model_name='aggregate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='asn', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='fhrpgroup', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='fhrpgroupassignment', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='ipaddress', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='iprange', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='prefix', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='rir', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='role', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='routetarget', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='service', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='servicetemplate', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='vlan', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='vlangroup', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='vrf', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - ] diff --git a/netbox/ipam/migrations/0058_ipaddress_nat_inside_nonunique.py b/netbox/ipam/migrations/0058_ipaddress_nat_inside_nonunique.py deleted file mode 100644 index 63e93d137..000000000 --- a/netbox/ipam/migrations/0058_ipaddress_nat_inside_nonunique.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0057_created_datetimefield'), - ] - - operations = [ - migrations.AlterField( - model_name='ipaddress', - name='nat_inside', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='nat_outside', to='ipam.ipaddress'), - ), - ] diff --git a/netbox/ipam/migrations/0059_l2vpn.py b/netbox/ipam/migrations/0059_l2vpn.py deleted file mode 100644 index 59dbab632..000000000 --- a/netbox/ipam/migrations/0059_l2vpn.py +++ /dev/null @@ -1,60 +0,0 @@ -from utilities.json import CustomFieldJSONEncoder -from django.db import migrations, models -import django.db.models.deletion -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0075_configcontext_locations'), - ('contenttypes', '0002_remove_content_type_name'), - ('tenancy', '0007_contact_link'), - ('ipam', '0058_ipaddress_nat_inside_nonunique'), - ] - - operations = [ - migrations.CreateModel( - name='L2VPN', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('name', models.CharField(max_length=100, unique=True)), - ('slug', models.SlugField()), - ('type', models.CharField(max_length=50)), - ('identifier', models.BigIntegerField(blank=True, null=True)), - ('description', models.CharField(blank=True, max_length=200)), - ('export_targets', models.ManyToManyField(blank=True, related_name='exporting_l2vpns', to='ipam.routetarget')), - ('import_targets', models.ManyToManyField(blank=True, related_name='importing_l2vpns', to='ipam.routetarget')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='l2vpns', to='tenancy.tenant')), - ], - options={ - 'verbose_name': 'L2VPN', - 'ordering': ('name', 'identifier'), - }, - ), - migrations.CreateModel( - name='L2VPNTermination', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('assigned_object_id', models.PositiveBigIntegerField()), - ('assigned_object_type', models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'dcim'), ('model', 'interface')), models.Q(('app_label', 'ipam'), ('model', 'vlan')), models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), _connector='OR')), on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('l2vpn', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='ipam.l2vpn')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ], - options={ - 'verbose_name': 'L2VPN termination', - 'ordering': ('l2vpn',), - }, - ), - migrations.AddConstraint( - model_name='l2vpntermination', - constraint=models.UniqueConstraint(fields=('assigned_object_type', 'assigned_object_id'), name='ipam_l2vpntermination_assigned_object'), - ), - ] diff --git a/netbox/ipam/migrations/0060_alter_l2vpn_slug.py b/netbox/ipam/migrations/0060_alter_l2vpn_slug.py deleted file mode 100644 index 9e70c2063..000000000 --- a/netbox/ipam/migrations/0060_alter_l2vpn_slug.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.7 on 2022-08-22 15:58 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0059_l2vpn'), - ] - - operations = [ - migrations.AlterField( - model_name='l2vpn', - name='slug', - field=models.SlugField(max_length=100, unique=True), - ), - ] diff --git a/netbox/ipam/migrations/0061_fhrpgroup_name.py b/netbox/ipam/migrations/0061_fhrpgroup_name.py deleted file mode 100644 index 7e232c18f..000000000 --- a/netbox/ipam/migrations/0061_fhrpgroup_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.7 on 2022-09-20 23:03 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0060_alter_l2vpn_slug'), - ] - - operations = [ - migrations.AddField( - model_name='fhrpgroup', - name='name', - field=models.CharField(blank=True, max_length=100), - ), - ] diff --git a/netbox/ipam/migrations/0062_unique_constraints.py b/netbox/ipam/migrations/0062_unique_constraints.py deleted file mode 100644 index 47c1a1214..000000000 --- a/netbox/ipam/migrations/0062_unique_constraints.py +++ /dev/null @@ -1,43 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0061_fhrpgroup_name'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='fhrpgroupassignment', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='vlan', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='vlangroup', - unique_together=set(), - ), - migrations.AddConstraint( - model_name='fhrpgroupassignment', - constraint=models.UniqueConstraint(fields=('interface_type', 'interface_id', 'group'), name='ipam_fhrpgroupassignment_unique_interface_group'), - ), - migrations.AddConstraint( - model_name='vlan', - constraint=models.UniqueConstraint(fields=('group', 'vid'), name='ipam_vlan_unique_group_vid'), - ), - migrations.AddConstraint( - model_name='vlan', - constraint=models.UniqueConstraint(fields=('group', 'name'), name='ipam_vlan_unique_group_name'), - ), - migrations.AddConstraint( - model_name='vlangroup', - constraint=models.UniqueConstraint(fields=('scope_type', 'scope_id', 'name'), name='ipam_vlangroup_unique_scope_name'), - ), - migrations.AddConstraint( - model_name='vlangroup', - constraint=models.UniqueConstraint(fields=('scope_type', 'scope_id', 'slug'), name='ipam_vlangroup_unique_scope_slug'), - ), - ] diff --git a/netbox/ipam/migrations/0063_standardize_description_comments.py b/netbox/ipam/migrations/0063_standardize_description_comments.py deleted file mode 100644 index 3a4959d14..000000000 --- a/netbox/ipam/migrations/0063_standardize_description_comments.py +++ /dev/null @@ -1,73 +0,0 @@ -# Generated by Django 4.1.2 on 2022-11-03 18:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0062_unique_constraints'), - ] - - operations = [ - migrations.AddField( - model_name='aggregate', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='asn', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='fhrpgroup', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='ipaddress', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='iprange', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='l2vpn', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='prefix', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='routetarget', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='service', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='servicetemplate', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='vlan', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='vrf', - name='comments', - field=models.TextField(blank=True), - ), - ] diff --git a/netbox/ipam/migrations/0064_clear_search_cache.py b/netbox/ipam/migrations/0064_clear_search_cache.py deleted file mode 100644 index 856fe99e1..000000000 --- a/netbox/ipam/migrations/0064_clear_search_cache.py +++ /dev/null @@ -1,31 +0,0 @@ -from django.db import migrations - - -def clear_cache(apps, schema_editor): - """ - Clear existing CachedValues referencing IPAddressFields or IPNetworkFields. (#11658 - introduced new cache record types for these.) - """ - ContentType = apps.get_model('contenttypes', 'ContentType') - CachedValue = apps.get_model('extras', 'CachedValue') - - for model_name in ('Aggregate', 'IPAddress', 'IPRange', 'Prefix'): - try: - content_type = ContentType.objects.get(app_label='ipam', model=model_name.lower()) - CachedValue.objects.filter(object_type=content_type).delete() - except ContentType.DoesNotExist: - pass - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0063_standardize_description_comments'), - ] - - operations = [ - migrations.RunPython( - code=clear_cache, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/ipam/migrations/0065_asnrange.py b/netbox/ipam/migrations/0065_asnrange.py deleted file mode 100644 index 71d056dfd..000000000 --- a/netbox/ipam/migrations/0065_asnrange.py +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Django 4.1.7 on 2023-02-26 19:33 - -from django.db import migrations, models -import django.db.models.deletion -import ipam.fields -import taggit.managers -import utilities.json - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0009_standardize_description_comments'), - ('extras', '0087_dashboard'), - ('ipam', '0064_clear_search_cache'), - ] - - operations = [ - migrations.CreateModel( - name='ASNRange', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), - ('created', models.DateTimeField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), - ('description', models.CharField(blank=True, max_length=200)), - ('name', models.CharField(max_length=100, unique=True)), - ('slug', models.SlugField(max_length=100, unique=True)), - ('start', ipam.fields.ASNField()), - ('end', ipam.fields.ASNField()), - ('rir', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='asn_ranges', to='ipam.rir')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='asn_ranges', to='tenancy.tenant')), - ], - options={ - 'verbose_name': 'ASN range', - 'verbose_name_plural': 'ASN ranges', - 'ordering': ('name',), - }, - ), - ] diff --git a/netbox/ipam/migrations/0066_iprange_mark_utilized.py b/netbox/ipam/migrations/0066_iprange_mark_utilized.py deleted file mode 100644 index 2489289fd..000000000 --- a/netbox/ipam/migrations/0066_iprange_mark_utilized.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.7 on 2023-02-28 14:51 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0065_asnrange'), - ] - - operations = [ - migrations.AddField( - model_name='iprange', - name='mark_utilized', - field=models.BooleanField(default=False), - ), - ] diff --git a/netbox/ipam/migrations/0067_ipaddress_index_host.py b/netbox/ipam/migrations/0067_ipaddress_index_host.py deleted file mode 100644 index 2383fd9aa..000000000 --- a/netbox/ipam/migrations/0067_ipaddress_index_host.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.1.10 on 2023-08-02 12:43 - -from django.db import migrations, models -import django.db.models.functions.comparison -import ipam.fields -import ipam.lookups - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0066_iprange_mark_utilized'), - ] - - operations = [ - migrations.AddIndex( - model_name='ipaddress', - index=models.Index(django.db.models.functions.comparison.Cast(ipam.lookups.Host('address'), output_field=ipam.fields.IPAddressField()), name='ipam_ipaddress_host'), - ), - ] diff --git a/netbox/tenancy/migrations/0002_squashed_0011.py b/netbox/tenancy/migrations/0002_squashed_0011.py new file mode 100644 index 000000000..8accd1da9 --- /dev/null +++ b/netbox/tenancy/migrations/0002_squashed_0011.py @@ -0,0 +1,185 @@ +import django.db.models.deletion +import mptt.fields +import taggit.managers +from django.db import migrations, models + +import utilities.json + + +class Migration(migrations.Migration): + + replaces = [ + ('tenancy', '0002_tenant_ordering'), + ('tenancy', '0003_contacts'), + ('tenancy', '0004_extend_tag_support'), + ('tenancy', '0005_standardize_id_fields'), + ('tenancy', '0006_created_datetimefield'), + ('tenancy', '0007_contact_link'), + ('tenancy', '0008_unique_constraints'), + ('tenancy', '0009_standardize_description_comments'), + ('tenancy', '0010_tenant_relax_uniqueness'), + ('tenancy', '0011_contactassignment_tags') + ] + + dependencies = [ + ('extras', '0002_squashed_0059'), + ('contenttypes', '0002_remove_content_type_name'), + ('tenancy', '0001_squashed_0012'), + ] + + operations = [ + migrations.AlterModelOptions( + name='tenant', + options={'ordering': ['name']}, + ), + migrations.CreateModel( + name='ContactRole', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=100, unique=True)), + ('slug', models.SlugField(max_length=100, unique=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='ContactGroup', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=100)), + ('slug', models.SlugField(max_length=100)), + ('description', models.CharField(blank=True, max_length=200)), + ('lft', models.PositiveIntegerField(editable=False)), + ('rght', models.PositiveIntegerField(editable=False)), + ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), + ('level', models.PositiveIntegerField(editable=False)), + ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='tenancy.contactgroup')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'ordering': ['name'], + 'unique_together': set(), + }, + ), + migrations.CreateModel( + name='Contact', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=100)), + ('title', models.CharField(blank=True, max_length=100)), + ('phone', models.CharField(blank=True, max_length=50)), + ('email', models.EmailField(blank=True, max_length=254)), + ('address', models.CharField(blank=True, max_length=200)), + ('comments', models.TextField(blank=True)), + ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contacts', to='tenancy.contactgroup')), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ('link', models.URLField(blank=True)), + ], + options={ + 'ordering': ['name'], + 'unique_together': set(), + }, + ), + migrations.AddField( + model_name='tenantgroup', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AlterField( + model_name='tenant', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='tenantgroup', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='tenant', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='tenantgroup', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.CreateModel( + name='ContactAssignment', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('object_id', models.PositiveBigIntegerField()), + ('priority', models.CharField(blank=True, max_length=50)), + ('contact', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='assignments', to='tenancy.contact')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ('role', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='assignments', to='tenancy.contactrole')), + ], + options={ + 'ordering': ('priority', 'contact'), + 'unique_together': set(), + }, + ), + migrations.AddConstraint( + model_name='contact', + constraint=models.UniqueConstraint(fields=('group', 'name'), name='tenancy_contact_unique_group_name'), + ), + migrations.AddConstraint( + model_name='contactassignment', + constraint=models.UniqueConstraint(fields=('content_type', 'object_id', 'contact', 'role'), name='tenancy_contactassignment_unique_object_contact_role'), + ), + migrations.AddConstraint( + model_name='contactgroup', + constraint=models.UniqueConstraint(fields=('parent', 'name'), name='tenancy_contactgroup_unique_parent_name'), + ), + migrations.AddField( + model_name='contact', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AlterField( + model_name='tenant', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='tenant', + name='slug', + field=models.SlugField(max_length=100), + ), + migrations.AddConstraint( + model_name='tenant', + constraint=models.UniqueConstraint(fields=('group', 'name'), name='tenancy_tenant_unique_group_name', violation_error_message='Tenant name must be unique per group.'), + ), + migrations.AddConstraint( + model_name='tenant', + constraint=models.UniqueConstraint(condition=models.Q(('group__isnull', True)), fields=('name',), name='tenancy_tenant_unique_name'), + ), + migrations.AddConstraint( + model_name='tenant', + constraint=models.UniqueConstraint(fields=('group', 'slug'), name='tenancy_tenant_unique_group_slug', violation_error_message='Tenant slug must be unique per group.'), + ), + migrations.AddConstraint( + model_name='tenant', + constraint=models.UniqueConstraint(condition=models.Q(('group__isnull', True)), fields=('slug',), name='tenancy_tenant_unique_slug'), + ), + migrations.AddField( + model_name='contactassignment', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + ] diff --git a/netbox/tenancy/migrations/0002_tenant_ordering.py b/netbox/tenancy/migrations/0002_tenant_ordering.py deleted file mode 100644 index a72601930..000000000 --- a/netbox/tenancy/migrations/0002_tenant_ordering.py +++ /dev/null @@ -1,15 +0,0 @@ -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0001_squashed_0012'), - ] - - operations = [ - migrations.AlterModelOptions( - name='tenant', - options={'ordering': ['name']}, - ), - ] diff --git a/netbox/tenancy/migrations/0003_contacts.py b/netbox/tenancy/migrations/0003_contacts.py deleted file mode 100644 index eb247ee29..000000000 --- a/netbox/tenancy/migrations/0003_contacts.py +++ /dev/null @@ -1,91 +0,0 @@ -from utilities.json import CustomFieldJSONEncoder -from django.db import migrations, models -import django.db.models.deletion -import mptt.fields -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0062_clear_secrets_changelog'), - ('contenttypes', '0002_remove_content_type_name'), - ('tenancy', '0002_tenant_ordering'), - ] - - operations = [ - migrations.CreateModel( - name='ContactRole', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=100, unique=True)), - ('slug', models.SlugField(max_length=100, unique=True)), - ('description', models.CharField(blank=True, max_length=200)), - ], - options={ - 'ordering': ('name',), - }, - ), - migrations.CreateModel( - name='ContactGroup', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=100)), - ('slug', models.SlugField(max_length=100)), - ('description', models.CharField(blank=True, max_length=200)), - ('lft', models.PositiveIntegerField(editable=False)), - ('rght', models.PositiveIntegerField(editable=False)), - ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), - ('level', models.PositiveIntegerField(editable=False)), - ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='tenancy.contactgroup')), - ], - options={ - 'ordering': ['name'], - 'unique_together': {('parent', 'name')}, - }, - ), - migrations.CreateModel( - name='Contact', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=100)), - ('title', models.CharField(blank=True, max_length=100)), - ('phone', models.CharField(blank=True, max_length=50)), - ('email', models.EmailField(blank=True, max_length=254)), - ('address', models.CharField(blank=True, max_length=200)), - ('comments', models.TextField(blank=True)), - ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contacts', to='tenancy.contactgroup')), - ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ], - options={ - 'ordering': ['name'], - 'unique_together': {('group', 'name')}, - }, - ), - migrations.CreateModel( - name='ContactAssignment', - fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), - ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('object_id', models.PositiveIntegerField()), - ('priority', models.CharField(blank=True, max_length=50)), - ('contact', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='assignments', to='tenancy.contact')), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), - ('role', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='assignments', to='tenancy.contactrole')), - ], - options={ - 'ordering': ('priority', 'contact'), - 'unique_together': {('content_type', 'object_id', 'contact', 'role', 'priority')}, - }, - ), - ] diff --git a/netbox/tenancy/migrations/0004_extend_tag_support.py b/netbox/tenancy/migrations/0004_extend_tag_support.py deleted file mode 100644 index 942be38b5..000000000 --- a/netbox/tenancy/migrations/0004_extend_tag_support.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.8 on 2021-10-21 14:50 - -from django.db import migrations -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0062_clear_secrets_changelog'), - ('tenancy', '0003_contacts'), - ] - - operations = [ - migrations.AddField( - model_name='contactgroup', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='contactrole', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='tenantgroup', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - ] diff --git a/netbox/tenancy/migrations/0005_standardize_id_fields.py b/netbox/tenancy/migrations/0005_standardize_id_fields.py deleted file mode 100644 index 05ea39066..000000000 --- a/netbox/tenancy/migrations/0005_standardize_id_fields.py +++ /dev/null @@ -1,50 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0145_site_remove_deprecated_fields'), - ('tenancy', '0004_extend_tag_support'), - ] - - operations = [ - # Model IDs - migrations.AlterField( - model_name='contact', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='contactassignment', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='contactgroup', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='contactrole', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='tenant', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='tenantgroup', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - - # GFK IDs - migrations.AlterField( - model_name='contactassignment', - name='object_id', - field=models.PositiveBigIntegerField(), - ), - ] diff --git a/netbox/tenancy/migrations/0006_created_datetimefield.py b/netbox/tenancy/migrations/0006_created_datetimefield.py deleted file mode 100644 index a972809e2..000000000 --- a/netbox/tenancy/migrations/0006_created_datetimefield.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 4.0.2 on 2022-02-08 18:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0005_standardize_id_fields'), - ] - - operations = [ - migrations.AlterField( - model_name='contact', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='contactassignment', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='contactgroup', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='contactrole', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='tenant', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='tenantgroup', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - ] diff --git a/netbox/tenancy/migrations/0007_contact_link.py b/netbox/tenancy/migrations/0007_contact_link.py deleted file mode 100644 index 43b7495e5..000000000 --- a/netbox/tenancy/migrations/0007_contact_link.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import migrations, models -import utilities.validators - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0006_created_datetimefield'), - ] - - operations = [ - migrations.AddField( - model_name='contact', - name='link', - field=models.URLField(blank=True), - ), - ] diff --git a/netbox/tenancy/migrations/0008_unique_constraints.py b/netbox/tenancy/migrations/0008_unique_constraints.py deleted file mode 100644 index 092878524..000000000 --- a/netbox/tenancy/migrations/0008_unique_constraints.py +++ /dev/null @@ -1,35 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0007_contact_link'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='contact', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='contactassignment', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='contactgroup', - unique_together=set(), - ), - migrations.AddConstraint( - model_name='contact', - constraint=models.UniqueConstraint(fields=('group', 'name'), name='tenancy_contact_unique_group_name'), - ), - migrations.AddConstraint( - model_name='contactassignment', - constraint=models.UniqueConstraint(fields=('content_type', 'object_id', 'contact', 'role'), name='tenancy_contactassignment_unique_object_contact_role'), - ), - migrations.AddConstraint( - model_name='contactgroup', - constraint=models.UniqueConstraint(fields=('parent', 'name'), name='tenancy_contactgroup_unique_parent_name'), - ), - ] diff --git a/netbox/tenancy/migrations/0009_standardize_description_comments.py b/netbox/tenancy/migrations/0009_standardize_description_comments.py deleted file mode 100644 index af93b055c..000000000 --- a/netbox/tenancy/migrations/0009_standardize_description_comments.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.2 on 2022-11-03 18:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0008_unique_constraints'), - ] - - operations = [ - migrations.AddField( - model_name='contact', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - ] diff --git a/netbox/tenancy/migrations/0010_tenant_relax_uniqueness.py b/netbox/tenancy/migrations/0010_tenant_relax_uniqueness.py deleted file mode 100644 index 6082fbfe9..000000000 --- a/netbox/tenancy/migrations/0010_tenant_relax_uniqueness.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 4.1.7 on 2023-03-01 01:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0009_standardize_description_comments'), - ] - - operations = [ - migrations.AlterField( - model_name='tenant', - name='name', - field=models.CharField(max_length=100), - ), - migrations.AlterField( - model_name='tenant', - name='slug', - field=models.SlugField(max_length=100), - ), - migrations.AddConstraint( - model_name='tenant', - constraint=models.UniqueConstraint(fields=('group', 'name'), name='tenancy_tenant_unique_group_name', violation_error_message='Tenant name must be unique per group.'), - ), - migrations.AddConstraint( - model_name='tenant', - constraint=models.UniqueConstraint(condition=models.Q(('group__isnull', True)), fields=('name',), name='tenancy_tenant_unique_name'), - ), - migrations.AddConstraint( - model_name='tenant', - constraint=models.UniqueConstraint(fields=('group', 'slug'), name='tenancy_tenant_unique_group_slug', violation_error_message='Tenant slug must be unique per group.'), - ), - migrations.AddConstraint( - model_name='tenant', - constraint=models.UniqueConstraint(condition=models.Q(('group__isnull', True)), fields=('slug',), name='tenancy_tenant_unique_slug'), - ), - ] diff --git a/netbox/tenancy/migrations/0011_contactassignment_tags.py b/netbox/tenancy/migrations/0011_contactassignment_tags.py deleted file mode 100644 index 3c17d9ec1..000000000 --- a/netbox/tenancy/migrations/0011_contactassignment_tags.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.1.10 on 2023-07-08 07:17 - -from django.db import migrations -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0097_customfield_remove_choices'), - ('tenancy', '0010_tenant_relax_uniqueness'), - ] - - operations = [ - migrations.AddField( - model_name='contactassignment', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - ] diff --git a/netbox/users/migrations/0002_squashed_0004.py b/netbox/users/migrations/0002_squashed_0004.py new file mode 100644 index 000000000..367dfb7fc --- /dev/null +++ b/netbox/users/migrations/0002_squashed_0004.py @@ -0,0 +1,78 @@ +import django.contrib.auth.models +import django.contrib.postgres.fields +from django.db import migrations, models +import ipam.fields + + +class Migration(migrations.Migration): + + replaces = [ + ('users', '0002_standardize_id_fields'), + ('users', '0003_token_allowed_ips_last_used'), + ('users', '0004_netboxgroup_netboxuser') + ] + + dependencies = [ + ('users', '0001_squashed_0011'), + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.AlterField( + model_name='objectpermission', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='token', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='userconfig', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AddField( + model_name='token', + name='allowed_ips', + field=django.contrib.postgres.fields.ArrayField(base_field=ipam.fields.IPNetworkField(), blank=True, null=True, size=None), + ), + migrations.AddField( + model_name='token', + name='last_used', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.CreateModel( + name='NetBoxGroup', + fields=[ + ], + options={ + 'verbose_name': 'Group', + 'proxy': True, + 'indexes': [], + 'constraints': [], + 'ordering': ('name',), + }, + bases=('auth.group',), + managers=[ + ('objects', django.contrib.auth.models.GroupManager()), + ], + ), + migrations.CreateModel( + name='NetBoxUser', + fields=[ + ], + options={ + 'verbose_name': 'User', + 'proxy': True, + 'indexes': [], + 'constraints': [], + 'ordering': ('username',), + }, + bases=('auth.user',), + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), + ] diff --git a/netbox/users/migrations/0002_standardize_id_fields.py b/netbox/users/migrations/0002_standardize_id_fields.py deleted file mode 100644 index 212ede6b1..000000000 --- a/netbox/users/migrations/0002_standardize_id_fields.py +++ /dev/null @@ -1,27 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0145_site_remove_deprecated_fields'), - ('users', '0001_squashed_0011'), - ] - - operations = [ - migrations.AlterField( - model_name='objectpermission', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='token', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='userconfig', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - ] diff --git a/netbox/users/migrations/0003_token_allowed_ips_last_used.py b/netbox/users/migrations/0003_token_allowed_ips_last_used.py deleted file mode 100644 index 946226f75..000000000 --- a/netbox/users/migrations/0003_token_allowed_ips_last_used.py +++ /dev/null @@ -1,23 +0,0 @@ -import django.contrib.postgres.fields -from django.db import migrations, models -import ipam.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0002_standardize_id_fields'), - ] - - operations = [ - migrations.AddField( - model_name='token', - name='allowed_ips', - field=django.contrib.postgres.fields.ArrayField(base_field=ipam.fields.IPNetworkField(), blank=True, null=True, size=None), - ), - migrations.AddField( - model_name='token', - name='last_used', - field=models.DateTimeField(blank=True, null=True), - ), - ] diff --git a/netbox/users/migrations/0004_netboxgroup_netboxuser.py b/netbox/users/migrations/0004_netboxgroup_netboxuser.py deleted file mode 100644 index 59d941643..000000000 --- a/netbox/users/migrations/0004_netboxgroup_netboxuser.py +++ /dev/null @@ -1,50 +0,0 @@ -# Generated by Django 4.1.9 on 2023-06-06 18:15 - -import django.contrib.auth.models -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ('users', '0003_token_allowed_ips_last_used'), - ] - - operations = [ - migrations.CreateModel( - name='NetBoxGroup', - fields=[], - options={ - 'verbose_name': 'Group', - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=('auth.group',), - managers=[ - ('objects', django.contrib.auth.models.GroupManager()), - ], - ), - migrations.CreateModel( - name='NetBoxUser', - fields=[], - options={ - 'verbose_name': 'User', - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=('auth.user',), - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], - ), - migrations.AlterModelOptions( - name='netboxgroup', - options={'ordering': ('name',), 'verbose_name': 'Group'}, - ), - migrations.AlterModelOptions( - name='netboxuser', - options={'ordering': ('username',), 'verbose_name': 'User'}, - ), - ] diff --git a/netbox/virtualization/migrations/0023_squashed_0036.py b/netbox/virtualization/migrations/0023_squashed_0036.py new file mode 100644 index 000000000..bbfb62b39 --- /dev/null +++ b/netbox/virtualization/migrations/0023_squashed_0036.py @@ -0,0 +1,196 @@ +import django.db.models.functions.text +import taggit.managers +from django.db import migrations, models + +import utilities.fields +import utilities.ordering + + +class Migration(migrations.Migration): + + replaces = [ + ('virtualization', '0023_virtualmachine_natural_ordering'), + ('virtualization', '0024_cluster_relax_uniqueness'), + ('virtualization', '0025_extend_tag_support'), + ('virtualization', '0026_vminterface_bridge'), + ('virtualization', '0027_standardize_id_fields'), + ('virtualization', '0028_vminterface_vrf'), + ('virtualization', '0029_created_datetimefield'), + ('virtualization', '0030_cluster_status'), + ('virtualization', '0031_virtualmachine_site_device'), + ('virtualization', '0032_virtualmachine_update_sites'), + ('virtualization', '0033_unique_constraints'), + ('virtualization', '0034_standardize_description_comments'), + ('virtualization', '0035_virtualmachine_interface_count'), + ('virtualization', '0036_virtualmachine_config_template') + ] + + dependencies = [ + ('dcim', '0003_squashed_0130'), + ('extras', '0098_webhook_custom_field_data_webhook_tags'), + ('ipam', '0047_squashed_0053'), + ('virtualization', '0022_vminterface_parent'), + ] + + operations = [ + migrations.AlterModelOptions( + name='virtualmachine', + options={'ordering': ('_name', 'pk')}, + ), + migrations.AddField( + model_name='virtualmachine', + name='_name', + field=utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize), + ), + migrations.AlterField( + model_name='cluster', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterUniqueTogether( + name='cluster', + unique_together={('site', 'name'), ('group', 'name')}, + ), + migrations.AddField( + model_name='clustergroup', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='clustertype', + name='tags', + field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), + ), + migrations.AddField( + model_name='vminterface', + name='bridge', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bridge_interfaces', to='virtualization.vminterface'), + ), + migrations.AlterField( + model_name='cluster', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='clustergroup', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='clustertype', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='virtualmachine', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='vminterface', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), + ), + migrations.AddField( + model_name='vminterface', + name='vrf', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vminterfaces', to='ipam.vrf'), + ), + migrations.AlterField( + model_name='cluster', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='clustergroup', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='clustertype', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='virtualmachine', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AlterField( + model_name='vminterface', + name='created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name='cluster', + name='status', + field=models.CharField(default='active', max_length=50), + ), + migrations.AddField( + model_name='virtualmachine', + name='site', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='virtual_machines', to='dcim.site'), + ), + migrations.AddField( + model_name='virtualmachine', + name='device', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='virtual_machines', to='dcim.device'), + ), + migrations.AlterField( + model_name='virtualmachine', + name='cluster', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='virtual_machines', to='virtualization.cluster'), + ), + migrations.AlterUniqueTogether( + name='cluster', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='virtualmachine', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='vminterface', + unique_together=set(), + ), + migrations.AddConstraint( + model_name='cluster', + constraint=models.UniqueConstraint(fields=('group', 'name'), name='virtualization_cluster_unique_group_name'), + ), + migrations.AddConstraint( + model_name='cluster', + constraint=models.UniqueConstraint(fields=('site', 'name'), name='virtualization_cluster_unique_site_name'), + ), + migrations.AddConstraint( + model_name='virtualmachine', + constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), models.F('cluster'), models.F('tenant'), name='virtualization_virtualmachine_unique_name_cluster_tenant'), + ), + migrations.AddConstraint( + model_name='virtualmachine', + constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), models.F('cluster'), condition=models.Q(('tenant__isnull', True)), name='virtualization_virtualmachine_unique_name_cluster', violation_error_message='Virtual machine name must be unique per cluster.'), + ), + migrations.AddConstraint( + model_name='vminterface', + constraint=models.UniqueConstraint(fields=('virtual_machine', 'name'), name='virtualization_vminterface_unique_virtual_machine_name'), + ), + migrations.AddField( + model_name='cluster', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='virtualmachine', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + migrations.AddField( + model_name='virtualmachine', + name='interface_count', + field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='virtual_machine', to_model='virtualization.VMInterface'), + ), + migrations.AddField( + model_name='virtualmachine', + name='config_template', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='%(class)ss', to='extras.configtemplate'), + ), + ] diff --git a/netbox/virtualization/migrations/0023_virtualmachine_natural_ordering.py b/netbox/virtualization/migrations/0023_virtualmachine_natural_ordering.py deleted file mode 100644 index 2fc2a38e0..000000000 --- a/netbox/virtualization/migrations/0023_virtualmachine_natural_ordering.py +++ /dev/null @@ -1,32 +0,0 @@ -from django.db import migrations -import utilities.fields -import utilities.ordering - - -def naturalize_virtualmachines(apps, schema_editor): - VirtualMachine = apps.get_model('virtualization', 'VirtualMachine') - for name in VirtualMachine.objects.values_list('name', flat=True).order_by('name').distinct(): - VirtualMachine.objects.filter(name=name).update(_name=utilities.ordering.naturalize(name, max_length=100)) - - -class Migration(migrations.Migration): - - dependencies = [ - ('virtualization', '0022_vminterface_parent'), - ] - - operations = [ - migrations.AlterModelOptions( - name='virtualmachine', - options={'ordering': ('_name', 'pk')}, - ), - migrations.AddField( - model_name='virtualmachine', - name='_name', - field=utilities.fields.NaturalOrderingField('name', max_length=100, blank=True, naturalize_function=utilities.ordering.naturalize), - ), - migrations.RunPython( - code=naturalize_virtualmachines, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/virtualization/migrations/0024_cluster_relax_uniqueness.py b/netbox/virtualization/migrations/0024_cluster_relax_uniqueness.py deleted file mode 100644 index 5ff214d29..000000000 --- a/netbox/virtualization/migrations/0024_cluster_relax_uniqueness.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0136_device_airflow'), - ('virtualization', '0023_virtualmachine_natural_ordering'), - ] - - operations = [ - migrations.AlterField( - model_name='cluster', - name='name', - field=models.CharField(max_length=100), - ), - migrations.AlterUniqueTogether( - name='cluster', - unique_together={('site', 'name'), ('group', 'name')}, - ), - ] diff --git a/netbox/virtualization/migrations/0025_extend_tag_support.py b/netbox/virtualization/migrations/0025_extend_tag_support.py deleted file mode 100644 index c77aee194..000000000 --- a/netbox/virtualization/migrations/0025_extend_tag_support.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.2.8 on 2021-10-21 14:50 - -from django.db import migrations -import taggit.managers - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0062_clear_secrets_changelog'), - ('virtualization', '0024_cluster_relax_uniqueness'), - ] - - operations = [ - migrations.AddField( - model_name='clustergroup', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - migrations.AddField( - model_name='clustertype', - name='tags', - field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'), - ), - ] diff --git a/netbox/virtualization/migrations/0026_vminterface_bridge.py b/netbox/virtualization/migrations/0026_vminterface_bridge.py deleted file mode 100644 index 04909c72c..000000000 --- a/netbox/virtualization/migrations/0026_vminterface_bridge.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.8 on 2021-10-21 20:26 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('virtualization', '0025_extend_tag_support'), - ] - - operations = [ - migrations.AddField( - model_name='vminterface', - name='bridge', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bridge_interfaces', to='virtualization.vminterface'), - ), - ] diff --git a/netbox/virtualization/migrations/0027_standardize_id_fields.py b/netbox/virtualization/migrations/0027_standardize_id_fields.py deleted file mode 100644 index 8c5ea8d70..000000000 --- a/netbox/virtualization/migrations/0027_standardize_id_fields.py +++ /dev/null @@ -1,37 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0145_site_remove_deprecated_fields'), - ('virtualization', '0026_vminterface_bridge'), - ] - - operations = [ - migrations.AlterField( - model_name='cluster', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='clustergroup', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='clustertype', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='virtualmachine', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='vminterface', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - ] diff --git a/netbox/virtualization/migrations/0028_vminterface_vrf.py b/netbox/virtualization/migrations/0028_vminterface_vrf.py deleted file mode 100644 index a188e1c60..000000000 --- a/netbox/virtualization/migrations/0028_vminterface_vrf.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.12 on 2022-02-07 14:39 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0056_standardize_id_fields'), - ('virtualization', '0027_standardize_id_fields'), - ] - - operations = [ - migrations.AddField( - model_name='vminterface', - name='vrf', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vminterfaces', to='ipam.vrf'), - ), - ] diff --git a/netbox/virtualization/migrations/0029_created_datetimefield.py b/netbox/virtualization/migrations/0029_created_datetimefield.py deleted file mode 100644 index d22547a25..000000000 --- a/netbox/virtualization/migrations/0029_created_datetimefield.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 4.0.2 on 2022-02-08 18:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('virtualization', '0028_vminterface_vrf'), - ] - - operations = [ - migrations.AlterField( - model_name='cluster', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='clustergroup', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='clustertype', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='virtualmachine', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='vminterface', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - ] diff --git a/netbox/virtualization/migrations/0030_cluster_status.py b/netbox/virtualization/migrations/0030_cluster_status.py deleted file mode 100644 index e836bb914..000000000 --- a/netbox/virtualization/migrations/0030_cluster_status.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.4 on 2022-05-19 19:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('virtualization', '0029_created_datetimefield'), - ] - - operations = [ - migrations.AddField( - model_name='cluster', - name='status', - field=models.CharField(default='active', max_length=50), - ), - ] diff --git a/netbox/virtualization/migrations/0031_virtualmachine_site_device.py b/netbox/virtualization/migrations/0031_virtualmachine_site_device.py deleted file mode 100644 index 85ea24455..000000000 --- a/netbox/virtualization/migrations/0031_virtualmachine_site_device.py +++ /dev/null @@ -1,28 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0153_created_datetimefield'), - ('virtualization', '0030_cluster_status'), - ] - - operations = [ - migrations.AddField( - model_name='virtualmachine', - name='site', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='virtual_machines', to='dcim.site'), - ), - migrations.AddField( - model_name='virtualmachine', - name='device', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='virtual_machines', to='dcim.device'), - ), - migrations.AlterField( - model_name='virtualmachine', - name='cluster', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='virtual_machines', to='virtualization.cluster'), - ), - ] diff --git a/netbox/virtualization/migrations/0032_virtualmachine_update_sites.py b/netbox/virtualization/migrations/0032_virtualmachine_update_sites.py deleted file mode 100644 index e9c52bfde..000000000 --- a/netbox/virtualization/migrations/0032_virtualmachine_update_sites.py +++ /dev/null @@ -1,27 +0,0 @@ -from django.db import migrations - - -def update_virtualmachines_site(apps, schema_editor): - """ - Automatically set the site for all virtual machines. - """ - VirtualMachine = apps.get_model('virtualization', 'VirtualMachine') - - virtual_machines = VirtualMachine.objects.filter(cluster__site__isnull=False) - for vm in virtual_machines: - vm.site = vm.cluster.site - VirtualMachine.objects.bulk_update(virtual_machines, ['site']) - - -class Migration(migrations.Migration): - - dependencies = [ - ('virtualization', '0031_virtualmachine_site_device'), - ] - - operations = [ - migrations.RunPython( - code=update_virtualmachines_site, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/virtualization/migrations/0033_unique_constraints.py b/netbox/virtualization/migrations/0033_unique_constraints.py deleted file mode 100644 index 0624d3607..000000000 --- a/netbox/virtualization/migrations/0033_unique_constraints.py +++ /dev/null @@ -1,44 +0,0 @@ -from django.db import migrations, models -import django.db.models.functions.text - - -class Migration(migrations.Migration): - - dependencies = [ - ('virtualization', '0032_virtualmachine_update_sites'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='cluster', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='virtualmachine', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='vminterface', - unique_together=set(), - ), - migrations.AddConstraint( - model_name='cluster', - constraint=models.UniqueConstraint(fields=('group', 'name'), name='virtualization_cluster_unique_group_name'), - ), - migrations.AddConstraint( - model_name='cluster', - constraint=models.UniqueConstraint(fields=('site', 'name'), name='virtualization_cluster_unique_site_name'), - ), - migrations.AddConstraint( - model_name='virtualmachine', - constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), models.F('cluster'), models.F('tenant'), name='virtualization_virtualmachine_unique_name_cluster_tenant'), - ), - migrations.AddConstraint( - model_name='virtualmachine', - constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), models.F('cluster'), condition=models.Q(('tenant__isnull', True)), name='virtualization_virtualmachine_unique_name_cluster', violation_error_message='Virtual machine name must be unique per cluster.'), - ), - migrations.AddConstraint( - model_name='vminterface', - constraint=models.UniqueConstraint(fields=('virtual_machine', 'name'), name='virtualization_vminterface_unique_virtual_machine_name'), - ), - ] diff --git a/netbox/virtualization/migrations/0034_standardize_description_comments.py b/netbox/virtualization/migrations/0034_standardize_description_comments.py deleted file mode 100644 index 8517adeca..000000000 --- a/netbox/virtualization/migrations/0034_standardize_description_comments.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.1.2 on 2022-11-03 18:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('virtualization', '0033_unique_constraints'), - ] - - operations = [ - migrations.AddField( - model_name='cluster', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - migrations.AddField( - model_name='virtualmachine', - name='description', - field=models.CharField(blank=True, max_length=200), - ), - ] diff --git a/netbox/virtualization/migrations/0035_virtualmachine_interface_count.py b/netbox/virtualization/migrations/0035_virtualmachine_interface_count.py deleted file mode 100644 index abed09d7e..000000000 --- a/netbox/virtualization/migrations/0035_virtualmachine_interface_count.py +++ /dev/null @@ -1,31 +0,0 @@ -from django.db import migrations -from django.db.models import Count - -import utilities.fields -from utilities.counters import update_counts - - -def populate_virtualmachine_counts(apps, schema_editor): - VirtualMachine = apps.get_model('virtualization', 'VirtualMachine') - - update_counts(VirtualMachine, 'interface_count', 'interfaces') - - -class Migration(migrations.Migration): - dependencies = [ - ('virtualization', '0034_standardize_description_comments'), - ] - - operations = [ - migrations.AddField( - model_name='virtualmachine', - name='interface_count', - field=utilities.fields.CounterCacheField( - default=0, to_field='virtual_machine', to_model='virtualization.VMInterface' - ), - ), - migrations.RunPython( - code=populate_virtualmachine_counts, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/virtualization/migrations/0036_virtualmachine_config_template.py b/netbox/virtualization/migrations/0036_virtualmachine_config_template.py deleted file mode 100644 index 0456eea81..000000000 --- a/netbox/virtualization/migrations/0036_virtualmachine_config_template.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.1.10 on 2023-08-11 17:16 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('extras', '0098_webhook_custom_field_data_webhook_tags'), - ('virtualization', '0035_virtualmachine_interface_count'), - ] - - operations = [ - migrations.AddField( - model_name='virtualmachine', - name='config_template', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='%(class)ss', to='extras.configtemplate'), - ), - ] diff --git a/netbox/wireless/migrations/0001_wireless.py b/netbox/wireless/migrations/0001_squashed_0008.py similarity index 56% rename from netbox/wireless/migrations/0001_wireless.py rename to netbox/wireless/migrations/0001_squashed_0008.py index 9369df8a5..2326f5cf7 100644 --- a/netbox/wireless/migrations/0001_wireless.py +++ b/netbox/wireless/migrations/0001_squashed_0008.py @@ -1,28 +1,40 @@ -from utilities.json import CustomFieldJSONEncoder -from django.db import migrations, models import django.db.models.deletion import mptt.fields import taggit.managers +from django.db import migrations, models + +import utilities.json +import wireless.models class Migration(migrations.Migration): - initial = True + replaces = [ + ('wireless', '0001_wireless'), + ('wireless', '0002_standardize_id_fields'), + ('wireless', '0003_created_datetimefield'), + ('wireless', '0004_wireless_tenancy'), + ('wireless', '0005_wirelesslink_interface_types'), + ('wireless', '0006_unique_constraints'), + ('wireless', '0007_standardize_description_comments'), + ('wireless', '0008_wirelesslan_status') + ] dependencies = [ - ('dcim', '0139_rename_cable_peer'), - ('extras', '0062_clear_secrets_changelog'), - ('ipam', '0050_iprange'), + ('ipam', '0002_squashed_0046'), + ('tenancy', '0007_contact_link'), + ('extras', '0002_squashed_0059'), + ('dcim', '0003_squashed_0130'), ] operations = [ migrations.CreateModel( name='WirelessLANGroup', fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(max_length=100, unique=True)), ('slug', models.SlugField(max_length=100, unique=True)), ('description', models.CharField(blank=True, max_length=200)), @@ -35,17 +47,17 @@ class Migration(migrations.Migration): ], options={ 'ordering': ('name', 'pk'), - 'unique_together': {('parent', 'name')}, + 'unique_together': set(), 'verbose_name': 'Wireless LAN Group', }, ), migrations.CreateModel( name='WirelessLAN', fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('ssid', models.CharField(max_length=32)), ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='wireless_lans', to='wireless.wirelesslangroup')), ('description', models.CharField(blank=True, max_length=200)), @@ -54,6 +66,7 @@ class Migration(migrations.Migration): ('auth_type', models.CharField(blank=True, max_length=50)), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ('vlan', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='ipam.vlan')), + ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='wireless_lans', to='tenancy.tenant')), ], options={ 'verbose_name': 'Wireless LAN', @@ -63,10 +76,10 @@ class Migration(migrations.Migration): migrations.CreateModel( name='WirelessLink', fields=[ - ('created', models.DateField(auto_now_add=True, null=True)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), ('last_updated', models.DateTimeField(auto_now=True, null=True)), - ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), - ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('ssid', models.CharField(blank=True, max_length=32)), ('status', models.CharField(default='connected', max_length=50)), ('description', models.CharField(blank=True, max_length=200)), @@ -75,13 +88,37 @@ class Migration(migrations.Migration): ('auth_type', models.CharField(blank=True, max_length=50)), ('_interface_a_device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dcim.device')), ('_interface_b_device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dcim.device')), - ('interface_a', models.ForeignKey(limit_choices_to={'type__in': ['ieee802.11a', 'ieee802.11g', 'ieee802.11n', 'ieee802.11ac', 'ieee802.11ad', 'ieee802.11ax']}, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='dcim.interface')), - ('interface_b', models.ForeignKey(limit_choices_to={'type__in': ['ieee802.11a', 'ieee802.11g', 'ieee802.11n', 'ieee802.11ac', 'ieee802.11ad', 'ieee802.11ax']}, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='dcim.interface')), + ('interface_a', models.ForeignKey(limit_choices_to=wireless.models.get_wireless_interface_types, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='dcim.interface')), + ('interface_b', models.ForeignKey(limit_choices_to=wireless.models.get_wireless_interface_types, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='dcim.interface')), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='wireless_links', to='tenancy.tenant')), ], options={ 'ordering': ['pk'], - 'unique_together': {('interface_a', 'interface_b')}, + 'unique_together': set(), }, ), + migrations.AddConstraint( + model_name='wirelesslangroup', + constraint=models.UniqueConstraint(fields=('parent', 'name'), name='wireless_wirelesslangroup_unique_parent_name'), + ), + migrations.AddConstraint( + model_name='wirelesslink', + constraint=models.UniqueConstraint(fields=('interface_a', 'interface_b'), name='wireless_wirelesslink_unique_interfaces'), + ), + migrations.AddField( + model_name='wirelesslan', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='wirelesslink', + name='comments', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='wirelesslan', + name='status', + field=models.CharField(default='active', max_length=50), + ), ] diff --git a/netbox/wireless/migrations/0002_standardize_id_fields.py b/netbox/wireless/migrations/0002_standardize_id_fields.py deleted file mode 100644 index d386d84fc..000000000 --- a/netbox/wireless/migrations/0002_standardize_id_fields.py +++ /dev/null @@ -1,27 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0145_site_remove_deprecated_fields'), - ('wireless', '0001_wireless'), - ] - - operations = [ - migrations.AlterField( - model_name='wirelesslan', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='wirelesslangroup', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='wirelesslink', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False), - ), - ] diff --git a/netbox/wireless/migrations/0003_created_datetimefield.py b/netbox/wireless/migrations/0003_created_datetimefield.py deleted file mode 100644 index fe251248c..000000000 --- a/netbox/wireless/migrations/0003_created_datetimefield.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 4.0.2 on 2022-02-08 18:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('wireless', '0002_standardize_id_fields'), - ] - - operations = [ - migrations.AlterField( - model_name='wirelesslan', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='wirelesslangroup', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AlterField( - model_name='wirelesslink', - name='created', - field=models.DateTimeField(auto_now_add=True, null=True), - ), - ] diff --git a/netbox/wireless/migrations/0004_wireless_tenancy.py b/netbox/wireless/migrations/0004_wireless_tenancy.py deleted file mode 100644 index aa5837b0a..000000000 --- a/netbox/wireless/migrations/0004_wireless_tenancy.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 4.0.5 on 2022-06-27 13:44 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('tenancy', '0007_contact_link'), - ('wireless', '0003_created_datetimefield'), - ] - - operations = [ - migrations.AddField( - model_name='wirelesslan', - name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='wireless_lans', to='tenancy.tenant'), - ), - migrations.AddField( - model_name='wirelesslink', - name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='wireless_links', to='tenancy.tenant'), - ), - ] diff --git a/netbox/wireless/migrations/0005_wirelesslink_interface_types.py b/netbox/wireless/migrations/0005_wirelesslink_interface_types.py deleted file mode 100644 index 0b3f88c5b..000000000 --- a/netbox/wireless/migrations/0005_wirelesslink_interface_types.py +++ /dev/null @@ -1,24 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion -import wireless.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0161_cabling_cleanup'), - ('wireless', '0004_wireless_tenancy'), - ] - - operations = [ - migrations.AlterField( - model_name='wirelesslink', - name='interface_a', - field=models.ForeignKey(limit_choices_to=wireless.models.get_wireless_interface_types, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='dcim.interface'), - ), - migrations.AlterField( - model_name='wirelesslink', - name='interface_b', - field=models.ForeignKey(limit_choices_to=wireless.models.get_wireless_interface_types, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='dcim.interface'), - ), - ] diff --git a/netbox/wireless/migrations/0006_unique_constraints.py b/netbox/wireless/migrations/0006_unique_constraints.py deleted file mode 100644 index f638ae1ab..000000000 --- a/netbox/wireless/migrations/0006_unique_constraints.py +++ /dev/null @@ -1,27 +0,0 @@ -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('wireless', '0005_wirelesslink_interface_types'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='wirelesslangroup', - unique_together=set(), - ), - migrations.AlterUniqueTogether( - name='wirelesslink', - unique_together=set(), - ), - migrations.AddConstraint( - model_name='wirelesslangroup', - constraint=models.UniqueConstraint(fields=('parent', 'name'), name='wireless_wirelesslangroup_unique_parent_name'), - ), - migrations.AddConstraint( - model_name='wirelesslink', - constraint=models.UniqueConstraint(fields=('interface_a', 'interface_b'), name='wireless_wirelesslink_unique_interfaces'), - ), - ] diff --git a/netbox/wireless/migrations/0007_standardize_description_comments.py b/netbox/wireless/migrations/0007_standardize_description_comments.py deleted file mode 100644 index e6e1ce8dd..000000000 --- a/netbox/wireless/migrations/0007_standardize_description_comments.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.1.2 on 2022-11-03 18:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('wireless', '0006_unique_constraints'), - ] - - operations = [ - migrations.AddField( - model_name='wirelesslan', - name='comments', - field=models.TextField(blank=True), - ), - migrations.AddField( - model_name='wirelesslink', - name='comments', - field=models.TextField(blank=True), - ), - ] diff --git a/netbox/wireless/migrations/0008_wirelesslan_status.py b/netbox/wireless/migrations/0008_wirelesslan_status.py deleted file mode 100644 index e7832aba2..000000000 --- a/netbox/wireless/migrations/0008_wirelesslan_status.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.2 on 2022-11-04 17:07 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('wireless', '0007_standardize_description_comments'), - ] - - operations = [ - migrations.AddField( - model_name='wirelesslan', - name='status', - field=models.CharField(default='active', max_length=50), - ), - ]