Просмотр исходного кода

Allow selecting NAT IP address by assigned virtual machine

Jeremy Stretch 5 лет назад
Родитель
Сommit
0e91d837a0
2 измененных файлов с 26 добавлено и 6 удалено
  1. 17 2
      netbox/ipam/forms.py
  2. 9 4
      netbox/templates/ipam/ipaddress_edit.html

+ 17 - 2
netbox/ipam/forms.py

@@ -13,7 +13,7 @@ from utilities.forms import (
     DatePicker, DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableIPAddressField, ReturnURLForm,
     SlugField, StaticSelect2, StaticSelect2Multiple, TagFilterField, BOOLEAN_WITH_BLANK_CHOICES,
 )
-from virtualization.models import VirtualMachine, VMInterface
+from virtualization.models import Cluster, VirtualMachine, VMInterface
 from .choices import *
 from .constants import *
 from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
@@ -553,6 +553,19 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
             'rack_id': '$nat_rack',
         }
     )
+    nat_cluster = DynamicModelChoiceField(
+        queryset=Cluster.objects.all(),
+        required=False,
+        label='Cluster'
+    )
+    nat_virtual_machine = DynamicModelChoiceField(
+        queryset=VirtualMachine.objects.all(),
+        required=False,
+        label='Virtual Machine',
+        query_params={
+            'cluster_id': '$nat_cluster',
+        }
+    )
     nat_vrf = DynamicModelChoiceField(
         queryset=VRF.objects.all(),
         required=False,
@@ -566,6 +579,7 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
         display_field='address',
         query_params={
             'device_id': '$nat_device',
+            'virtual_machine_id': '$nat_virtual_machine',
             'vrf_id': '$nat_vrf',
         }
     )
@@ -582,7 +596,8 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
         model = IPAddress
         fields = [
             'address', 'vrf', 'status', 'role', 'dns_name', 'description', 'primary_for_parent', 'nat_site', 'nat_rack',
-            'nat_inside', 'tenant_group', 'tenant', 'tags',
+            'nat_device', 'nat_cluster', 'nat_virtual_machine', 'nat_vrf', 'nat_inside', 'tenant_group', 'tenant',
+            'tags',
         ]
         widgets = {
             'status': StaticSelect2(),

+ 9 - 4
netbox/templates/ipam/ipaddress_edit.html

@@ -56,16 +56,21 @@
         <div class="panel-heading"><strong>NAT IP (Inside)</strong></div>
         <div class="panel-body">
             <ul class="nav nav-tabs" role="tablist">
-                <li role="presentation" class="active"><a href="#select" aria-controls="home" role="tab" data-toggle="tab">By Device</a></li>
-                <li role="presentation"><a href="#search" aria-controls="search" role="tab" data-toggle="tab">By IP</a></li>
+                <li role="presentation" class="active"><a href="#by_device" aria-controls="home" role="tab" data-toggle="tab">By Device</a></li>
+                <li role="presentation"><a href="#by_vm" aria-controls="search" role="tab" data-toggle="tab">By VM</a></li>
+                <li role="presentation"><a href="#by_vrf" aria-controls="search" role="tab" data-toggle="tab">By IP</a></li>
             </ul>
             <div class="tab-content">
-                <div class="tab-pane active" id="select">
+                <div class="tab-pane active" id="by_device">
                     {% render_field form.nat_site %}
                     {% render_field form.nat_rack %}
                     {% render_field form.nat_device %}
                 </div>
-                <div class="tab-pane" id="search">
+                <div class="tab-pane" id="by_vm">
+                    {% render_field form.nat_cluster %}
+                    {% render_field form.nat_virtual_machine %}
+                </div>
+                <div class="tab-pane" id="by_vrf">
                   {% render_field form.nat_vrf %}
                 </div>
             </div>