Przeglądaj źródła

Fixes: #10757 - Change IP interface assignment to use new selector (#12452)

* Fixes: #10757 - Change interface assignment to use new selector.  Perform the same change to the NAT assignment as well.

* Remove nat_vrf from form and remove query_params that are not required anymore
Daniel Sheppard 2 lat temu
rodzic
commit
46914d9479

+ 6 - 56
netbox/ipam/forms/model_forms.py

@@ -262,38 +262,21 @@ class IPRangeForm(TenancyForm, NetBoxModelForm):
 
 
 
 
 class IPAddressForm(TenancyForm, NetBoxModelForm):
 class IPAddressForm(TenancyForm, NetBoxModelForm):
-    device = DynamicModelChoiceField(
-        queryset=Device.objects.all(),
-        required=False,
-        initial_params={
-            'interfaces': '$interface'
-        }
-    )
     interface = DynamicModelChoiceField(
     interface = DynamicModelChoiceField(
         queryset=Interface.objects.all(),
         queryset=Interface.objects.all(),
         required=False,
         required=False,
-        query_params={
-            'device_id': '$device'
-        }
-    )
-    virtual_machine = DynamicModelChoiceField(
-        queryset=VirtualMachine.objects.all(),
-        required=False,
-        initial_params={
-            'interfaces': '$vminterface'
-        }
+        selector=True,
     )
     )
     vminterface = DynamicModelChoiceField(
     vminterface = DynamicModelChoiceField(
         queryset=VMInterface.objects.all(),
         queryset=VMInterface.objects.all(),
         required=False,
         required=False,
+        selector=True,
         label=_('Interface'),
         label=_('Interface'),
-        query_params={
-            'virtual_machine_id': '$virtual_machine'
-        }
     )
     )
     fhrpgroup = DynamicModelChoiceField(
     fhrpgroup = DynamicModelChoiceField(
         queryset=FHRPGroup.objects.all(),
         queryset=FHRPGroup.objects.all(),
         required=False,
         required=False,
+        selector=True,
         label=_('FHRP Group')
         label=_('FHRP Group')
     )
     )
     vrf = DynamicModelChoiceField(
     vrf = DynamicModelChoiceField(
@@ -301,33 +284,11 @@ class IPAddressForm(TenancyForm, NetBoxModelForm):
         required=False,
         required=False,
         label=_('VRF')
         label=_('VRF')
     )
     )
-    nat_device = DynamicModelChoiceField(
-        queryset=Device.objects.all(),
-        required=False,
-        selector=True,
-        label=_('Device')
-    )
-    nat_virtual_machine = DynamicModelChoiceField(
-        queryset=VirtualMachine.objects.all(),
-        required=False,
-        selector=True,
-        label=_('Virtual Machine')
-    )
-    nat_vrf = DynamicModelChoiceField(
-        queryset=VRF.objects.all(),
-        required=False,
-        selector=True,
-        label=_('VRF')
-    )
     nat_inside = DynamicModelChoiceField(
     nat_inside = DynamicModelChoiceField(
         queryset=IPAddress.objects.all(),
         queryset=IPAddress.objects.all(),
         required=False,
         required=False,
+        selector=True,
         label=_('IP Address'),
         label=_('IP Address'),
-        query_params={
-            'device_id': '$nat_device',
-            'virtual_machine_id': '$nat_virtual_machine',
-            'vrf_id': '$nat_vrf',
-        }
     )
     )
     primary_for_parent = forms.BooleanField(
     primary_for_parent = forms.BooleanField(
         required=False,
         required=False,
@@ -338,8 +299,8 @@ class IPAddressForm(TenancyForm, NetBoxModelForm):
     class Meta:
     class Meta:
         model = IPAddress
         model = IPAddress
         fields = [
         fields = [
-            'address', 'vrf', 'status', 'role', 'dns_name', 'primary_for_parent', 'nat_device', 'nat_virtual_machine',
-            'nat_vrf', 'nat_inside', 'tenant_group', 'tenant', 'description', 'comments', 'tags',
+            'address', 'vrf', 'status', 'role', 'dns_name', 'primary_for_parent', 'nat_inside', 'tenant_group',
+            'tenant', 'description', 'comments', 'tags',
         ]
         ]
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -354,17 +315,6 @@ class IPAddressForm(TenancyForm, NetBoxModelForm):
                 initial['vminterface'] = instance.assigned_object
                 initial['vminterface'] = instance.assigned_object
             elif type(instance.assigned_object) is FHRPGroup:
             elif type(instance.assigned_object) is FHRPGroup:
                 initial['fhrpgroup'] = instance.assigned_object
                 initial['fhrpgroup'] = instance.assigned_object
-            if instance.nat_inside:
-                nat_inside_parent = instance.nat_inside.assigned_object
-                if type(nat_inside_parent) is Interface:
-                    initial['nat_site'] = nat_inside_parent.device.site.pk
-                    if nat_inside_parent.device.rack:
-                        initial['nat_rack'] = nat_inside_parent.device.rack.pk
-                    initial['nat_device'] = nat_inside_parent.device.pk
-                elif type(nat_inside_parent) is VMInterface:
-                    if cluster := nat_inside_parent.virtual_machine.cluster:
-                        initial['nat_cluster'] = cluster.pk
-                    initial['nat_virtual_machine'] = nat_inside_parent.virtual_machine.pk
         kwargs['initial'] = initial
         kwargs['initial'] = initial
 
 
         super().__init__(*args, **kwargs)
         super().__init__(*args, **kwargs)

+ 0 - 56
netbox/templates/ipam/ipaddress_edit.html

@@ -56,11 +56,9 @@
       </div>
       </div>
       <div class="tab-content p-0 border-0">
       <div class="tab-content p-0 border-0">
         <div class="tab-pane {% if not form.initial.vminterface and not form.initial.fhrpgroup %}active{% endif %}" id="device" role="tabpanel" aria-labeled-by="device_tab">
         <div class="tab-pane {% if not form.initial.vminterface and not form.initial.fhrpgroup %}active{% endif %}" id="device" role="tabpanel" aria-labeled-by="device_tab">
-          {% render_field form.device %}
           {% render_field form.interface %}
           {% render_field form.interface %}
         </div>
         </div>
         <div class="tab-pane {% if form.initial.vminterface %}active{% endif %}" id="vm" role="tabpanel" aria-labeled-by="vm_tab">
         <div class="tab-pane {% if form.initial.vminterface %}active{% endif %}" id="vm" role="tabpanel" aria-labeled-by="vm_tab">
-          {% render_field form.virtual_machine %}
           {% render_field form.vminterface %}
           {% render_field form.vminterface %}
         </div>
         </div>
         <div class="tab-pane {% if form.initial.fhrpgroup %}active{% endif %}" id="fhrpgroup" role="tabpanel" aria-labeled-by="fhrpgroup_tab">
         <div class="tab-pane {% if form.initial.fhrpgroup %}active{% endif %}" id="fhrpgroup" role="tabpanel" aria-labeled-by="fhrpgroup_tab">
@@ -75,60 +73,6 @@
         <h5 class="offset-sm-3">NAT IP (Inside)</h5>
         <h5 class="offset-sm-3">NAT IP (Inside)</h5>
       </div>
       </div>
       <div class="row mb-2">
       <div class="row mb-2">
-        <div class="offset-sm-3">
-          <ul class="nav nav-pills" role="tablist">
-            <li class="nav-item" role="presentation">
-                <button
-                    role="tab"
-                    type="button"
-                    id="device_tab"
-                    data-bs-toggle="tab"
-                    class="nav-link active"
-                    data-bs-target="#by_device"
-                    aria-controls="by_device"
-                >
-                    By Device
-                </button>
-            </li>
-            <li class="nav-item" role="presentation">
-                <button
-                    role="tab"
-                    type="button"
-                    id="vm_tab"
-                    data-bs-toggle="tab"
-                    class="nav-link"
-                    data-bs-target="#by_vm"
-                    aria-controls="by_vm"
-                >
-                    By VM
-                </button>
-            </li>
-            <li class="nav-item" role="presentation">
-                <button
-                    role="tab"
-                    type="button"
-                    id="vrf_tab"
-                    data-bs-toggle="tab"
-                    class="nav-link"
-                    data-bs-target="#by_vrf"
-                    aria-controls="by_vrf"
-                >
-                    By IP
-                </button>
-            </li>
-          </ul>
-        </div>
-      </div>
-      <div class="tab-content p-0 border-0">
-          <div class="tab-pane active" id="by_device" aria-labelledby="device_tab" role="tabpanel">
-              {% render_field form.nat_device %}
-          </div>
-          <div class="tab-pane" id="by_vm" aria-labelledby="vm_tab" role="tabpanel">
-              {% render_field form.nat_virtual_machine %}
-          </div>
-          <div class="tab-pane" id="by_vrf" aria-labelledby="vrf_tab" role="tabpanel">
-              {% render_field form.nat_vrf %}
-          </div>
           {% render_field form.nat_inside %}
           {% render_field form.nat_inside %}
       </div>
       </div>
     </div>
     </div>