Beispiel #1
0
class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
    model = IPAddress
    field_order = [
        'q', 'parent', 'family', 'mask_length', 'vrf_id', 'present_in_vrf_id', 'status', 'role',
        'assigned_to_interface', 'tenant_group_id', 'tenant_id',
    ]
    q = forms.CharField(
        required=False,
        label=_('Search')
    )
    parent = forms.CharField(
        required=False,
        widget=forms.TextInput(
            attrs={
                'placeholder': 'Prefix',
            }
        ),
        label='Parent Prefix'
    )
    family = forms.ChoiceField(
        required=False,
        choices=add_blank_choice(IPAddressFamilyChoices),
        label=_('Address family'),
        widget=StaticSelect2()
    )
    mask_length = forms.ChoiceField(
        required=False,
        choices=IPADDRESS_MASK_LENGTH_CHOICES,
        label=_('Mask length'),
        widget=StaticSelect2()
    )
    vrf_id = DynamicModelMultipleChoiceField(
        queryset=VRF.objects.all(),
        required=False,
        label=_('Assigned VRF'),
        null_option='Global'
    )
    present_in_vrf_id = DynamicModelChoiceField(
        queryset=VRF.objects.all(),
        required=False,
        label=_('Present in VRF')
    )
    status = forms.MultipleChoiceField(
        choices=IPAddressStatusChoices,
        required=False,
        widget=StaticSelect2Multiple()
    )
    role = forms.MultipleChoiceField(
        choices=IPAddressRoleChoices,
        required=False,
        widget=StaticSelect2Multiple()
    )
    assigned_to_interface = forms.NullBooleanField(
        required=False,
        label=_('Assigned to an interface'),
        widget=StaticSelect2(
            choices=BOOLEAN_WITH_BLANK_CHOICES
        )
    )
    tag = TagFilterField(model)
Beispiel #2
0
class IPAddressFilterForm(BootstrapMixin, CustomFieldFilterForm):
    model = IPAddress
    q = forms.CharField(
        required=False,
        label='Search'
    )
    parent = forms.CharField(
        required=False,
        widget=forms.TextInput(
            attrs={
                'placeholder': 'Prefix',
            }
        ),
        label='Parent Prefix'
    )
    family = forms.ChoiceField(
        required=False,
        choices=IP_FAMILY_CHOICES,
        label='Address family',
        widget=StaticSelect2()
    )
    mask_length = forms.ChoiceField(
        required=False,
        choices=IPADDRESS_MASK_LENGTH_CHOICES,
        label='Mask length',
        widget=StaticSelect2()
    )
    vrf = FilterChoiceField(
        queryset=VRF.objects.all(),
        to_field_name='rd',
        label='VRF',
        null_label='-- Global --',
        widget=APISelectMultiple(
            api_url="/api/ipam/vrfs/",
            value_field="slug",
            null_option=True,
        )
    )
    tenant = FilterChoiceField(
        queryset=Tenant.objects.all(),
        to_field_name='slug',
        null_label='-- None --',
        widget=APISelectMultiple(
            api_url="/api/tenancy/tenants/",
            value_field="slug",
            null_option=True,
        )
    )
    status = forms.MultipleChoiceField(
        choices=IPADDRESS_STATUS_CHOICES,
        required=False,
        widget=StaticSelect2Multiple()
    )
    role = forms.MultipleChoiceField(
        choices=IPADDRESS_ROLE_CHOICES,
        required=False,
        widget=StaticSelect2Multiple()
    )
Beispiel #3
0
 class Meta:
     model = SecretRole
     fields = [
         'name', 'slug', 'description', 'users', 'groups',
     ]
     widgets = {
         'users': StaticSelect2Multiple(),
         'groups': StaticSelect2Multiple(),
     }
Beispiel #4
0
class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
    model = IPAddress
    field_order = [
        'q', 'parent', 'family', 'mask_length', 'vrf_id', 'status', 'role', 'assigned_to_interface', 'tenant_group',
        'tenant',
    ]
    q = forms.CharField(
        required=False,
        label='Search'
    )
    parent = forms.CharField(
        required=False,
        widget=forms.TextInput(
            attrs={
                'placeholder': 'Prefix',
            }
        ),
        label='Parent Prefix'
    )
    family = forms.ChoiceField(
        required=False,
        choices=IP_FAMILY_CHOICES,
        label='Address family',
        widget=StaticSelect2()
    )
    mask_length = forms.ChoiceField(
        required=False,
        choices=IPADDRESS_MASK_LENGTH_CHOICES,
        label='Mask length',
        widget=StaticSelect2()
    )
    vrf_id = FilterChoiceField(
        queryset=VRF.objects.all(),
        label='VRF',
        null_label='-- Global --',
        widget=APISelectMultiple(
            api_url="/api/ipam/vrfs/",
            null_option=True,
        )
    )
    status = forms.MultipleChoiceField(
        choices=IPADDRESS_STATUS_CHOICES,
        required=False,
        widget=StaticSelect2Multiple()
    )
    role = forms.MultipleChoiceField(
        choices=IPADDRESS_ROLE_CHOICES,
        required=False,
        widget=StaticSelect2Multiple()
    )
    assigned_to_interface = forms.NullBooleanField(
        required=False,
        label='Assigned to an interface',
        widget=StaticSelect2(
            choices=BOOLEAN_WITH_BLANK_CHOICES
        )
    )
Beispiel #5
0
class BGPSessionFilterForm(BootstrapMixin, forms.ModelForm):
    q = forms.CharField(required=False, label='Search')
    remote_as = DynamicModelMultipleChoiceField(
        queryset=ASN.objects.all(),
        required=False,
        display_field='number',
        widget=APISelectMultiple(api_url='/api/plugins/bgp/asn/', ))
    local_as = DynamicModelMultipleChoiceField(
        queryset=ASN.objects.all(),
        required=False,
        display_field='number',
        widget=APISelectMultiple(api_url='/api/plugins/bgp/asn/', ))
    tenant = DynamicModelChoiceField(queryset=Tenant.objects.all(),
                                     required=False)
    status = forms.MultipleChoiceField(choices=SessionStatusChoices,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    import_policies = DynamicModelMultipleChoiceField(
        queryset=RoutingPolicy.objects.all(),
        required=False,
        widget=APISelectMultiple(api_url='/api/plugins/bgp/routing-policy/'))
    export_policies = DynamicModelMultipleChoiceField(
        queryset=RoutingPolicy.objects.all(),
        required=False,
        widget=APISelectMultiple(api_url='/api/plugins/bgp/routing-policy/'))

    tag = TagFilterField(BGPSession)

    class Meta:
        model = BGPSession
        fields = ['q', 'status', 'tenant', 'remote_as', 'local_as']
Beispiel #6
0
class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
    model = VLAN
    field_order = [
        'q', 'site', 'group_id', 'status', 'role', 'tenant_group', 'tenant'
    ]
    q = forms.CharField(required=False, label='Search')
    site = FilterChoiceField(queryset=Site.objects.all(),
                             to_field_name='slug',
                             null_label='-- Global --',
                             widget=APISelectMultiple(
                                 api_url="/api/dcim/sites/",
                                 value_field="slug",
                                 null_option=True,
                             ))
    group_id = FilterChoiceField(queryset=VLANGroup.objects.all(),
                                 label='VLAN group',
                                 null_label='-- None --',
                                 widget=APISelectMultiple(
                                     api_url="/api/ipam/vlan-groups/",
                                     null_option=True,
                                 ))
    status = forms.MultipleChoiceField(choices=VLAN_STATUS_CHOICES,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    role = FilterChoiceField(queryset=Role.objects.all(),
                             to_field_name='slug',
                             null_label='-- None --',
                             widget=APISelectMultiple(
                                 api_url="/api/ipam/roles/",
                                 value_field="slug",
                                 null_option=True,
                             ))
Beispiel #7
0
class CircuitFilterForm(BootstrapMixin, TenancyFilterForm,
                        CustomFieldFilterForm):
    model = Circuit
    field_order = [
        'q',
        'type',
        'provider',
        'status',
        'region',
        'site',
        'tenant_group',
        'tenant',
        'commit_rate',
    ]
    q = forms.CharField(required=False, label='Search')
    type = DynamicModelMultipleChoiceField(queryset=CircuitType.objects.all(),
                                           to_field_name='slug',
                                           required=False)
    provider = DynamicModelMultipleChoiceField(queryset=Provider.objects.all(),
                                               to_field_name='slug',
                                               required=False)
    status = forms.MultipleChoiceField(choices=CircuitStatusChoices,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    region = DynamicModelMultipleChoiceField(queryset=Region.objects.all(),
                                             to_field_name='slug',
                                             required=False)
    site = DynamicModelMultipleChoiceField(queryset=Site.objects.all(),
                                           to_field_name='slug',
                                           required=False,
                                           query_params={'region': '$region'})
    commit_rate = forms.IntegerField(required=False,
                                     min_value=0,
                                     label='Commit rate (Kbps)')
    tag = TagFilterField(model)
Beispiel #8
0
class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
    model = VLAN
    field_order = [
        'q', 'region', 'site', 'group_id', 'status', 'role', 'tenant_group',
        'tenant'
    ]
    q = forms.CharField(required=False, label='Search')
    region = DynamicModelMultipleChoiceField(queryset=Region.objects.all(),
                                             to_field_name='slug',
                                             required=False)
    site = DynamicModelMultipleChoiceField(queryset=Site.objects.all(),
                                           to_field_name='slug',
                                           required=False,
                                           null_option='None',
                                           query_params={'region': '$region'})
    group_id = DynamicModelMultipleChoiceField(
        queryset=VLANGroup.objects.all(),
        required=False,
        label='VLAN group',
        null_option='None',
        query_params={'region': '$region'})
    status = forms.MultipleChoiceField(choices=VLANStatusChoices,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    role = DynamicModelMultipleChoiceField(queryset=Role.objects.all(),
                                           to_field_name='slug',
                                           required=False,
                                           null_option='None')
    tag = TagFilterField(model)
class ServiceMappingFilterForm(BootstrapMixin, forms.ModelForm):
    model = Device
    field_order = ['q', 'status', 'role', 'tenant', 'device_type_id', 'tag']
    q = forms.CharField(required=False, label='Search device or service')
    tenant = DynamicModelMultipleChoiceField(
        queryset=Tenant.objects.all(),
        to_field_name='slug',
        required=False,
        widget=APISelectMultiple(
            # value_field="slug",
            # null_option=True,
        ))
    role = DynamicModelMultipleChoiceField(
        queryset=DeviceRole.objects.all(),
        to_field_name='slug',
        required=False,
        widget=APISelectMultiple(
            # value_field="slug",
        ))
    device_type_id = DynamicModelMultipleChoiceField(
        queryset=DeviceType.objects.all(),
        required=False,
        label='Model',
        display_field="model",
        widget=APISelectMultiple())
    status = forms.MultipleChoiceField(label='Status',
                                       choices=ServiceComplianceChoices,
                                       required=False,
                                       widget=StaticSelect2Multiple())

    tag = TagFilterField(model)

    class Meta:
        model = Device
        fields = ['q', 'status', 'role', 'tenant', 'device_type_id', 'tag']
Beispiel #10
0
class CircuitFilterForm(BootstrapMixin, CustomFieldFilterForm):
    model = Circuit
    q = forms.CharField(required=False, label='Search')
    type = FilterChoiceField(queryset=CircuitType.objects.all(),
                             to_field_name='slug',
                             widget=APISelectMultiple(
                                 api_url="/api/circuits/circuit-types/",
                                 value_field="slug",
                             ))
    provider = FilterChoiceField(queryset=Provider.objects.all(),
                                 to_field_name='slug',
                                 widget=APISelectMultiple(
                                     api_url="/api/circuits/providers/",
                                     value_field="slug",
                                 ))
    status = forms.MultipleChoiceField(choices=CIRCUIT_STATUS_CHOICES,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    tenant = FilterChoiceField(queryset=Tenant.objects.all(),
                               to_field_name='slug',
                               null_label='-- None --',
                               widget=APISelectMultiple(
                                   api_url="/api/tenancy/tenants/",
                                   value_field="slug",
                                   null_option=True,
                               ))
    site = FilterChoiceField(queryset=Site.objects.all(),
                             to_field_name='slug',
                             widget=APISelectMultiple(
                                 api_url="/api/dcim/sites/",
                                 value_field="slug",
                             ))
    commit_rate = forms.IntegerField(required=False,
                                     min_value=0,
                                     label='Commit rate (Kbps)')
Beispiel #11
0
class ServiceFilterForm(BootstrapMixin, CustomFieldFilterForm):
    model = Service
    q = forms.CharField(required=False, label='Search')
    protocol = forms.ChoiceField(choices=add_blank_choice(IP_PROTOCOL_CHOICES),
                                 required=False,
                                 widget=StaticSelect2Multiple())
    port = forms.IntegerField(required=False, )
Beispiel #12
0
class PrefixFilterForm(BootstrapMixin, CustomFieldFilterForm):
    model = Prefix
    q = forms.CharField(required=False, label='Search')
    within_include = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'placeholder': 'Prefix',
        }),
        label='Search within')
    family = forms.ChoiceField(required=False,
                               choices=IP_FAMILY_CHOICES,
                               label='Address family',
                               widget=StaticSelect2())
    mask_length = forms.ChoiceField(required=False,
                                    choices=PREFIX_MASK_LENGTH_CHOICES,
                                    label='Mask length',
                                    widget=StaticSelect2())
    vrf = FilterChoiceField(queryset=VRF.objects.all(),
                            to_field_name='rd',
                            label='VRF',
                            null_label='-- Global --',
                            widget=APISelectMultiple(
                                api_url="/api/ipam/vrfs/",
                                value_field="rd",
                                null_option=True,
                            ))
    tenant = FilterChoiceField(queryset=Tenant.objects.all(),
                               to_field_name='slug',
                               null_label='-- None --',
                               widget=APISelectMultiple(
                                   api_url="/api/tenancy/tenants/",
                                   value_field="slug",
                                   null_option=True,
                               ))
    status = forms.MultipleChoiceField(choices=PREFIX_STATUS_CHOICES,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    site = FilterChoiceField(queryset=Site.objects.all(),
                             to_field_name='slug',
                             null_label='-- None --',
                             widget=APISelectMultiple(
                                 api_url="/api/dcim/sites/",
                                 value_field="slug",
                                 null_option=True,
                             ))
    role = FilterChoiceField(queryset=Role.objects.all(),
                             to_field_name='slug',
                             null_label='-- None --',
                             widget=APISelectMultiple(
                                 api_url="/api/ipam/roles/",
                                 value_field="slug",
                                 null_option=True,
                             ))
    is_pool = forms.NullBooleanField(
        required=False,
        label='Is a pool',
        widget=StaticSelect2(choices=BOOLEAN_WITH_BLANK_CHOICES))
    expand = forms.BooleanField(required=False,
                                label='Expand prefix hierarchy')
Beispiel #13
0
class VirtualMachineFilterForm(BootstrapMixin, TenancyFilterForm,
                               CustomFieldFilterForm):
    model = VirtualMachine
    field_order = [
        'q',
        'cluster_group_id',
        'cluster_type_id',
        'cluster_id',
        'status',
        'role_id',
        'region_id',
        'site_id',
        'tenant_group_id',
        'tenant_id',
        'platform_id',
        'mac_address',
    ]
    q = forms.CharField(required=False, label=_('Search'))
    cluster_group_id = DynamicModelMultipleChoiceField(
        queryset=ClusterGroup.objects.all(),
        required=False,
        null_option='None',
        label=_('Cluster group'))
    cluster_type_id = DynamicModelMultipleChoiceField(
        queryset=ClusterType.objects.all(),
        required=False,
        null_option='None',
        label=_('Cluster type'))
    cluster_id = DynamicModelMultipleChoiceField(
        queryset=Cluster.objects.all(), required=False, label=_('Cluster'))
    region_id = DynamicModelMultipleChoiceField(queryset=Region.objects.all(),
                                                required=False,
                                                label=_('Region'))
    site_id = DynamicModelMultipleChoiceField(
        queryset=Site.objects.all(),
        required=False,
        null_option='None',
        query_params={'region_id': '$region_id'},
        label=_('Cluster'))
    role_id = DynamicModelMultipleChoiceField(
        queryset=DeviceRole.objects.all(),
        required=False,
        null_option='None',
        query_params={'vm_role': "True"},
        label=_('Role'))
    status = forms.MultipleChoiceField(choices=VirtualMachineStatusChoices,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    platform_id = DynamicModelMultipleChoiceField(
        queryset=Platform.objects.all(),
        required=False,
        null_option='None',
        label=_('Platform'))
    mac_address = forms.CharField(required=False, label='MAC address')
    has_primary_ip = forms.NullBooleanField(
        required=False,
        label='Has a primary IP',
        widget=StaticSelect2(choices=BOOLEAN_WITH_BLANK_CHOICES))
    tag = TagFilterField(model)
Beispiel #14
0
class PrefixFilterForm(BootstrapMixin, TenancyFilterForm,
                       CustomFieldFilterForm):
    model = Prefix
    field_order = [
        'q',
        'within_include',
        'family',
        'mask_length',
        'vrf_id',
        'status',
        'region',
        'site',
        'role',
        'tenant_group',
        'tenant',
        'is_pool',
        'expand',
    ]
    mask_length__lte = forms.IntegerField(widget=forms.HiddenInput())
    q = forms.CharField(required=False, label='Search')
    within_include = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'placeholder': 'Prefix',
        }),
        label='Search within')
    family = forms.ChoiceField(
        required=False,
        choices=add_blank_choice(IPAddressFamilyChoices),
        label='Address family',
        widget=StaticSelect2())
    mask_length = forms.ChoiceField(required=False,
                                    choices=PREFIX_MASK_LENGTH_CHOICES,
                                    label='Mask length',
                                    widget=StaticSelect2())
    vrf_id = DynamicModelMultipleChoiceField(queryset=VRF.objects.all(),
                                             required=False,
                                             label='VRF',
                                             null_option='Global')
    status = forms.MultipleChoiceField(choices=PrefixStatusChoices,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    region = DynamicModelMultipleChoiceField(queryset=Region.objects.all(),
                                             to_field_name='slug',
                                             required=False)
    site = DynamicModelMultipleChoiceField(queryset=Site.objects.all(),
                                           to_field_name='slug',
                                           required=False,
                                           null_option='None',
                                           query_params={'region': '$region'})
    role = DynamicModelMultipleChoiceField(queryset=Role.objects.all(),
                                           to_field_name='slug',
                                           required=False,
                                           null_option='None')
    is_pool = forms.NullBooleanField(
        required=False,
        label='Is a pool',
        widget=StaticSelect2(choices=BOOLEAN_WITH_BLANK_CHOICES))
    tag = TagFilterField(model)
Beispiel #15
0
class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
    model = Circuit
    field_order = [
        'q', 'type', 'provider', 'status', 'region', 'site', 'tenant_group', 'tenant', 'commit_rate',
    ]
    q = forms.CharField(
        required=False,
        label='Search'
    )
    type = FilterChoiceField(
        queryset=CircuitType.objects.all(),
        to_field_name='slug',
        widget=APISelectMultiple(
            api_url="/api/circuits/circuit-types/",
            value_field="slug",
        )
    )
    provider = FilterChoiceField(
        queryset=Provider.objects.all(),
        to_field_name='slug',
        widget=APISelectMultiple(
            api_url="/api/circuits/providers/",
            value_field="slug",
        )
    )
    status = forms.MultipleChoiceField(
        choices=CircuitStatusChoices,
        required=False,
        widget=StaticSelect2Multiple()
    )
    region = forms.ModelMultipleChoiceField(
        queryset=Region.objects.all(),
        to_field_name='slug',
        required=False,
        widget=APISelectMultiple(
            api_url="/api/dcim/regions/",
            value_field="slug",
            filter_for={
                'site': 'region'
            }
        )
    )
    site = FilterChoiceField(
        queryset=Site.objects.all(),
        to_field_name='slug',
        widget=APISelectMultiple(
            api_url="/api/dcim/sites/",
            value_field="slug",
        )
    )
    commit_rate = forms.IntegerField(
        required=False,
        min_value=0,
        label='Commit rate (Kbps)'
    )
    tag = TagFilterField(model)
Beispiel #16
0
class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
    model = VLAN
    field_order = ['q', 'region', 'site', 'group_id', 'status', 'role', 'tenant_group', 'tenant']
    q = forms.CharField(
        required=False,
        label='Search'
    )
    region = DynamicModelMultipleChoiceField(
        queryset=Region.objects.all(),
        to_field_name='slug',
        required=False,
        widget=APISelectMultiple(
            api_url="/api/dcim/regions/",
            value_field="slug",
            filter_for={
                'site': 'region',
                'group_id': 'region'
            }
        )
    )
    site = DynamicModelMultipleChoiceField(
        queryset=Site.objects.all(),
        to_field_name='slug',
        required=False,
        widget=APISelectMultiple(
            api_url="/api/dcim/sites/",
            value_field="slug",
            null_option=True,
        )
    )
    group_id = DynamicModelMultipleChoiceField(
        queryset=VLANGroup.objects.all(),
        required=False,
        label='VLAN group',
        widget=APISelectMultiple(
            api_url="/api/ipam/vlan-groups/",
            null_option=True,
        )
    )
    status = forms.MultipleChoiceField(
        choices=VLANStatusChoices,
        required=False,
        widget=StaticSelect2Multiple()
    )
    role = DynamicModelMultipleChoiceField(
        queryset=Role.objects.all(),
        to_field_name='slug',
        required=False,
        widget=APISelectMultiple(
            api_url="/api/ipam/roles/",
            value_field="slug",
            null_option=True,
        )
    )
    tag = TagFilterField(model)
Beispiel #17
0
class VirtualMachineFilterForm(BootstrapMixin, TenancyFilterForm,
                               CustomFieldFilterForm):
    model = VirtualMachine
    field_order = [
        'q',
        'cluster_group',
        'cluster_type',
        'cluster_id',
        'status',
        'role',
        'region',
        'site',
        'tenant_group',
        'tenant',
        'platform',
        'mac_address',
    ]
    q = forms.CharField(required=False, label='Search')
    cluster_group = DynamicModelMultipleChoiceField(
        queryset=ClusterGroup.objects.all(),
        to_field_name='slug',
        required=False,
        null_option='None')
    cluster_type = DynamicModelMultipleChoiceField(
        queryset=ClusterType.objects.all(),
        to_field_name='slug',
        required=False,
        null_option='None')
    cluster_id = DynamicModelMultipleChoiceField(
        queryset=Cluster.objects.all(), required=False, label='Cluster')
    region = DynamicModelMultipleChoiceField(queryset=Region.objects.all(),
                                             to_field_name='slug',
                                             required=False)
    site = DynamicModelMultipleChoiceField(queryset=Site.objects.all(),
                                           to_field_name='slug',
                                           required=False,
                                           null_option='None',
                                           query_params={'region': '$region'})
    role = DynamicModelMultipleChoiceField(
        queryset=DeviceRole.objects.filter(vm_role=True),
        to_field_name='slug',
        required=False,
        null_option='None',
        query_params={'vm_role': "True"})
    status = forms.MultipleChoiceField(choices=VirtualMachineStatusChoices,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    platform = DynamicModelMultipleChoiceField(queryset=Platform.objects.all(),
                                               to_field_name='slug',
                                               required=False,
                                               null_option='None')
    mac_address = forms.CharField(required=False, label='MAC address')
    tag = TagFilterField(model)
Beispiel #18
0
 class Meta:
     model = Service
     fields = [
         'name', 'protocol', 'port', 'ipaddresses', 'description', 'tags',
     ]
     help_texts = {
         'ipaddresses': "IP address assignment is optional. If no IPs are selected, the service is assumed to be "
                        "reachable via all IPs assigned to the device.",
     }
     widgets = {
         'protocol': StaticSelect2(),
         'ipaddresses': StaticSelect2Multiple(),
     }
Beispiel #19
0
class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
    model = VLAN
    field_order = [
        'q', 'region_id', 'site_group_id', 'site_id', 'group_id', 'status', 'role_id', 'tenant_group_id', 'tenant_id',
    ]
    q = forms.CharField(
        required=False,
        label='Поиск'
    )
    region_id = DynamicModelMultipleChoiceField(
        queryset=Region.objects.all(),
        required=False,
        label=_('Region')
    )
    site_group_id = DynamicModelMultipleChoiceField(
        queryset=SiteGroup.objects.all(),
        required=False,
        label=_('Site group')
    )
    site_id = DynamicModelMultipleChoiceField(
        queryset=Site.objects.all(),
        required=False,
        null_option='None',
        query_params={
            'region': '$region'
        },
        label=_('Site')
    )
    group_id = DynamicModelMultipleChoiceField(
        queryset=VLANGroup.objects.all(),
        required=False,
        null_option='None',
        query_params={
            'region': '$region'
        },
        label=_('VLAN group')
    )
    status = forms.MultipleChoiceField(
        label='Статус',
        choices=VLANStatusChoices,
        required=False,
        widget=StaticSelect2Multiple()
    )
    role_id = DynamicModelMultipleChoiceField(
        queryset=Role.objects.all(),
        required=False,
        null_option='None',
        label=_('Role')
    )
    tag = TagFilterField(model)
Beispiel #20
0
class CommunityFilterForm(BootstrapMixin, forms.ModelForm):
    q = forms.CharField(required=False, label='Search')
    tenant = DynamicModelChoiceField(queryset=Tenant.objects.all(),
                                     required=False)
    status = forms.MultipleChoiceField(choices=ASNStatusChoices,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    site = DynamicModelChoiceField(queryset=Site.objects.all(), required=False)

    tag = TagFilterField(Community)

    class Meta:
        model = Community
        fields = ['q', 'status', 'tenant']
Beispiel #21
0
class ScheduledTaskFilterForm(BootstrapMixin, forms.ModelForm):
    model = ScheduledTask
    q = forms.CharField(required=False, label="Search")
    task_type = forms.MultipleChoiceField(
        label="Type", choices=TaskTypeChoices, required=False, widget=StaticSelect2Multiple()
    )
    status = forms.MultipleChoiceField(
        label="Status", choices=TaskStatusChoices, required=False, widget=StaticSelect2Multiple()
    )
    confirmed = forms.NullBooleanField(
        required=False, label="Is Confirmed (ACK)", widget=StaticSelect2(choices=BOOLEAN_WITH_BLANK_CHOICES)
    )
    scheduled_time_after = forms.DateTimeField(
        label=mark_safe("<br/>Scheduled After"), required=False, widget=DateTimePicker()
    )
    scheduled_time_before = forms.DateTimeField(label="Scheduled Before", required=False, widget=DateTimePicker())
    start_time_after = forms.DateTimeField(
        label=mark_safe("<br/>Started After"), required=False, widget=DateTimePicker()
    )
    start_time_before = forms.DateTimeField(label="Started Before", required=False, widget=DateTimePicker())
    end_time_after = forms.DateTimeField(label=mark_safe("<br/>Ended After"), required=False, widget=DateTimePicker())
    end_time_before = forms.DateTimeField(label="Ended Before", required=False, widget=DateTimePicker())

    class Meta:
        model = ScheduledTask
        fields = [
            "q",
            "task_type",
            "status",
            "confirmed",
            "scheduled_time_after",
            "scheduled_time_before",
            "start_time_after",
            "start_time_before",
            "end_time_after",
            "end_time_before",
        ]
Beispiel #22
0
class ServiceFilterForm(BootstrapMixin, CustomFieldFilterForm):
    model = Service
    q = forms.CharField(
        required=False,
        label=_('Search')
    )
    protocol = forms.ChoiceField(
        choices=add_blank_choice(ServiceProtocolChoices),
        required=False,
        widget=StaticSelect2Multiple()
    )
    port = forms.IntegerField(
        required=False,
    )
    tag = TagFilterField(model)
Beispiel #23
0
class ConfigContextForm(BootstrapMixin, forms.ModelForm):
    regions = TreeNodeMultipleChoiceField(
        queryset=Region.objects.all(),
        required=False,
        widget=StaticSelect2Multiple()
    )
    sites = DynamicModelMultipleChoiceField(
        queryset=Site.objects.all(),
        required=False
    )
    roles = DynamicModelMultipleChoiceField(
        queryset=DeviceRole.objects.all(),
        required=False
    )
    platforms = DynamicModelMultipleChoiceField(
        queryset=Platform.objects.all(),
        required=False
    )
    cluster_groups = DynamicModelMultipleChoiceField(
        queryset=ClusterGroup.objects.all(),
        required=False
    )
    clusters = DynamicModelMultipleChoiceField(
        queryset=Cluster.objects.all(),
        required=False
    )
    tenant_groups = DynamicModelMultipleChoiceField(
        queryset=TenantGroup.objects.all(),
        required=False
    )
    tenants = DynamicModelMultipleChoiceField(
        queryset=Tenant.objects.all(),
        required=False
    )
    tags = DynamicModelMultipleChoiceField(
        queryset=Tag.objects.all(),
        required=False
    )
    data = JSONField(
        label=''
    )

    class Meta:
        model = ConfigContext
        fields = (
            'name', 'weight', 'description', 'is_active', 'regions', 'sites', 'roles', 'platforms', 'cluster_groups',
            'clusters', 'tenant_groups', 'tenants', 'tags', 'data',
        )
Beispiel #24
0
class PrefixFilterForm(BootstrapMixin, TenancyFilterForm,
                       CustomFieldFilterForm):
    model = Prefix
    field_order = [
        'q',
        'within_include',
        'family',
        'mask_length',
        'vrf_id',
        'status',
        'region',
        'site',
        'role',
        'tenant_group',
        'tenant',
        'is_pool',
        'expand',
    ]
    q = forms.CharField(required=False, label='Search')
    within_include = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'placeholder': 'Prefix',
        }),
        label='Search within')
    family = forms.ChoiceField(
        required=False,
        choices=add_blank_choice(IPAddressFamilyChoices),
        label='Address family',
        widget=StaticSelect2())
    mask_length = forms.ChoiceField(required=False,
                                    choices=PREFIX_MASK_LENGTH_CHOICES,
                                    label='Mask length',
                                    widget=StaticSelect2())
    vrf_id = FilterChoiceField(queryset=VRF.objects.all(),
                               label='VRF',
                               null_label='-- Global --',
                               widget=APISelectMultiple(
                                   api_url="/api/ipam/vrfs/",
                                   null_option=True,
                               ))
    status = forms.MultipleChoiceField(choices=PrefixStatusChoices,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    region = FilterChoiceField(queryset=Region.objects.all(),
                               to_field_name='slug',
                               required=False,
                               widget=APISelectMultiple(
                                   api_url="/api/dcim/regions/",
                                   value_field="slug",
                                   filter_for={'site': 'region'}))
    site = FilterChoiceField(queryset=Site.objects.all(),
                             to_field_name='slug',
                             null_label='-- None --',
                             widget=APISelectMultiple(
                                 api_url="/api/dcim/sites/",
                                 value_field="slug",
                                 null_option=True,
                             ))
    role = FilterChoiceField(queryset=Role.objects.all(),
                             to_field_name='slug',
                             null_label='-- None --',
                             widget=APISelectMultiple(
                                 api_url="/api/ipam/roles/",
                                 value_field="slug",
                                 null_option=True,
                             ))
    is_pool = forms.NullBooleanField(
        required=False,
        label='Is a pool',
        widget=StaticSelect2(choices=BOOLEAN_WITH_BLANK_CHOICES))
    expand = forms.BooleanField(required=False,
                                label='Expand prefix hierarchy')
Beispiel #25
0
class VirtualMachineFilterForm(BootstrapMixin, CustomFieldFilterForm):
    model = VirtualMachine
    q = forms.CharField(required=False, label='Search')
    cluster_group = FilterChoiceField(
        queryset=ClusterGroup.objects.all(),
        to_field_name='slug',
        null_label='-- None --',
        widget=APISelectMultiple(
            api_url='/api/virtualization/cluster-groups/',
            value_field="slug",
            null_option=True,
        ))
    cluster_type = FilterChoiceField(
        queryset=ClusterType.objects.all(),
        to_field_name='slug',
        null_label='-- None --',
        widget=APISelectMultiple(
            api_url='/api/virtualization/cluster-types/',
            value_field="slug",
            null_option=True,
        ))
    cluster_id = FilterChoiceField(
        queryset=Cluster.objects.all(),
        label='Cluster',
        widget=APISelectMultiple(api_url='/api/virtualization/clusters/', ))
    region = FilterChoiceField(queryset=Region.objects.all(),
                               to_field_name='slug',
                               required=False,
                               widget=APISelectMultiple(
                                   api_url='/api/dcim/regions/',
                                   value_field="slug",
                                   null_option=True,
                               ))
    site = FilterChoiceField(queryset=Site.objects.all(),
                             to_field_name='slug',
                             null_label='-- None --',
                             widget=APISelectMultiple(
                                 api_url='/api/dcim/sites/',
                                 value_field="slug",
                                 null_option=True,
                             ))
    role = FilterChoiceField(queryset=DeviceRole.objects.filter(vm_role=True),
                             to_field_name='slug',
                             null_label='-- None --',
                             widget=APISelectMultiple(
                                 api_url='/api/dcim/device-roles/',
                                 value_field="slug",
                                 null_option=True,
                                 additional_query_params={'vm_role': 'true'}))
    status = forms.MultipleChoiceField(choices=VM_STATUS_CHOICES,
                                       required=False,
                                       widget=StaticSelect2Multiple())
    tenant = FilterChoiceField(queryset=Tenant.objects.all(),
                               to_field_name='slug',
                               null_label='-- None --',
                               widget=APISelectMultiple(
                                   api_url='/api/tenancy/tenants/',
                                   value_field="slug",
                                   null_option=True,
                               ))
    platform = FilterChoiceField(queryset=Platform.objects.all(),
                                 to_field_name='slug',
                                 null_label='-- None --',
                                 widget=APISelectMultiple(
                                     api_url='/api/dcim/platforms/',
                                     value_field="slug",
                                     null_option=True,
                                 ))
Beispiel #26
0
class BGPSessionFilterForm(BootstrapMixin, CustomFieldModelForm):
    q = forms.CharField(
        required=False,
        label='Search'
    )
    remote_as = DynamicModelMultipleChoiceField(
        queryset=ASN.objects.all(),
        required=False,
        display_field='number',
        widget=APISelectMultiple(
            api_url='/api/plugins/bgp/asn/',
        )
    )
    local_as = DynamicModelMultipleChoiceField(
        queryset=ASN.objects.all(),
        required=False,
        display_field='number',
        widget=APISelectMultiple(
            api_url='/api/plugins/bgp/asn/',
        )
    )
    by_local_address = forms.CharField(
        required=False,
        label='Local Address'
    )
    by_remote_address = forms.CharField(
        required=False,
        label='Remote Address'
    )
    device_id = DynamicModelMultipleChoiceField(
        queryset=Device.objects.all(),
        required=False,
        label=_('Device')
    )
    status = forms.MultipleChoiceField(
        choices=SessionStatusChoices,
        required=False,
        widget=StaticSelect2Multiple()
    )
    peer_group = DynamicModelMultipleChoiceField(
        queryset=BGPPeerGroup.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url='/api/plugins/bgp/peer-group/'
        )
    )
    import_policies = DynamicModelMultipleChoiceField(
        queryset=RoutingPolicy.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url='/api/plugins/bgp/routing-policy/'
        )
    )
    export_policies = DynamicModelMultipleChoiceField(
        queryset=RoutingPolicy.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url='/api/plugins/bgp/routing-policy/'
        )
    )
    tenant = DynamicModelChoiceField(
        queryset=Tenant.objects.all(),
        required=False
    )

    tag = TagFilterField(BGPSession)

    class Meta:
        model = BGPSession
        fields = ['q', 'status', 'device_id', 'remote_as', 'local_as']
Beispiel #27
0
class ConfigContextForm(BootstrapMixin, forms.ModelForm):
    regions = TreeNodeMultipleChoiceField(
        queryset=Region.objects.all(),
        required=False,
        widget=StaticSelect2Multiple()
    )
    sites = DynamicModelMultipleChoiceField(
        queryset=Site.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url="/api/dcim/sites/"
        )
    )
    roles = DynamicModelMultipleChoiceField(
        queryset=DeviceRole.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url="/api/dcim/device-roles/"
        )
    )
    platforms = DynamicModelMultipleChoiceField(
        queryset=Platform.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url="/api/dcim/platforms/"
        )
    )
    cluster_groups = DynamicModelMultipleChoiceField(
        queryset=ClusterGroup.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url="/api/virtualization/cluster-groups/"
        )
    )
    clusters = DynamicModelMultipleChoiceField(
        queryset=Cluster.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url="/api/virtualization/clusters/"
        )
    )
    tenant_groups = DynamicModelMultipleChoiceField(
        queryset=TenantGroup.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url="/api/tenancy/tenant-groups/"
        )
    )
    tenants = DynamicModelMultipleChoiceField(
        queryset=Tenant.objects.all(),
        required=False,
        widget=APISelectMultiple(
            api_url="/api/tenancy/tenants/"
        )
    )
    tags = DynamicModelMultipleChoiceField(
        queryset=Tag.objects.all(),
        to_field_name='slug',
        required=False,
        widget=APISelectMultiple(
            api_url="/api/extras/tags/"
        )
    )
    data = JSONField(
        label=''
    )

    class Meta:
        model = ConfigContext
        fields = (
            'name', 'weight', 'description', 'is_active', 'regions', 'sites', 'roles', 'platforms', 'cluster_groups',
            'clusters', 'tenant_groups', 'tenants', 'tags', 'data',
        )
Beispiel #28
0
class VirtualMachineFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
    model = VirtualMachine
    field_order = [
        'q', 'cluster_group', 'cluster_type', 'cluster_id', 'status', 'role', 'region', 'site', 'tenant_group',
        'tenant', 'platform', 'mac_address',
    ]
    q = forms.CharField(
        required=False,
        label='Search'
    )
    cluster_group = FilterChoiceField(
        queryset=ClusterGroup.objects.all(),
        to_field_name='slug',
        null_label='-- None --',
        widget=APISelectMultiple(
            api_url='/api/virtualization/cluster-groups/',
            value_field="slug",
            null_option=True,
        )
    )
    cluster_type = FilterChoiceField(
        queryset=ClusterType.objects.all(),
        to_field_name='slug',
        null_label='-- None --',
        widget=APISelectMultiple(
            api_url='/api/virtualization/cluster-types/',
            value_field="slug",
            null_option=True,
        )
    )
    cluster_id = FilterChoiceField(
        queryset=Cluster.objects.all(),
        label='Cluster',
        widget=APISelectMultiple(
            api_url='/api/virtualization/clusters/',
        )
    )
    region = FilterChoiceField(
        queryset=Region.objects.all(),
        to_field_name='slug',
        required=False,
        widget=APISelectMultiple(
            api_url='/api/dcim/regions/',
            value_field="slug",
            filter_for={
                'site': 'region'
            }
        )
    )
    site = FilterChoiceField(
        queryset=Site.objects.all(),
        to_field_name='slug',
        null_label='-- None --',
        widget=APISelectMultiple(
            api_url='/api/dcim/sites/',
            value_field="slug",
            null_option=True,
        )
    )
    role = FilterChoiceField(
        queryset=DeviceRole.objects.filter(vm_role=True),
        to_field_name='slug',
        null_label='-- None --',
        widget=APISelectMultiple(
            api_url='/api/dcim/device-roles/',
            value_field="slug",
            null_option=True,
            additional_query_params={
                'vm_role': "True"
            }
        )
    )
    status = forms.MultipleChoiceField(
        choices=VirtualMachineStatusChoices,
        required=False,
        widget=StaticSelect2Multiple()
    )
    platform = FilterChoiceField(
        queryset=Platform.objects.all(),
        to_field_name='slug',
        null_label='-- None --',
        widget=APISelectMultiple(
            api_url='/api/dcim/platforms/',
            value_field="slug",
            null_option=True,
        )
    )
    mac_address = forms.CharField(
        required=False,
        label='MAC address'
    )
    tag = TagFilterField(model)
Beispiel #29
0
    def to_form_field(self, set_initial=True, enforce_required=True, for_csv_import=False):
        """
        Return a form field suitable for setting a CustomField's value for an object.

        set_initial: Set initial date for the field. This should be False when generating a field for bulk editing.
        enforce_required: Honor the value of CustomField.required. Set to False for filtering/bulk editing.
        for_csv_import: Return a form field suitable for bulk import of objects in CSV format.
        """
        initial = self.default if set_initial else None
        required = self.required if enforce_required else False

        # Integer
        if self.type == CustomFieldTypeChoices.TYPE_INTEGER:
            field = forms.IntegerField(
                required=required,
                initial=initial,
                min_value=self.validation_minimum,
                max_value=self.validation_maximum
            )

        # Boolean
        elif self.type == CustomFieldTypeChoices.TYPE_BOOLEAN:
            choices = (
                (None, '---------'),
                (True, 'True'),
                (False, 'False'),
            )
            field = forms.NullBooleanField(
                required=required, initial=initial, widget=StaticSelect2(choices=choices)
            )

        # Date
        elif self.type == CustomFieldTypeChoices.TYPE_DATE:
            field = forms.DateField(required=required, initial=initial, widget=DatePicker())

        # Select
        elif self.type in (CustomFieldTypeChoices.TYPE_SELECT, CustomFieldTypeChoices.TYPE_MULTISELECT):
            choices = [(c, c) for c in self.choices]
            default_choice = self.default if self.default in self.choices else None

            if not required or default_choice is None:
                choices = add_blank_choice(choices)

            # Set the initial value to the first available choice (if any)
            if set_initial and default_choice:
                initial = default_choice

            if self.type == CustomFieldTypeChoices.TYPE_SELECT:
                field_class = CSVChoiceField if for_csv_import else forms.ChoiceField
                field = field_class(
                    choices=choices, required=required, initial=initial, widget=StaticSelect2()
                )
            else:
                field_class = CSVChoiceField if for_csv_import else forms.MultipleChoiceField
                field = field_class(
                    choices=choices, required=required, initial=initial, widget=StaticSelect2Multiple()
                )

        # URL
        elif self.type == CustomFieldTypeChoices.TYPE_URL:
            field = LaxURLField(required=required, initial=initial)

        # Text
        else:
            field = forms.CharField(max_length=255, required=required, initial=initial)
            if self.validation_regex:
                field.validators = [
                    RegexValidator(
                        regex=self.validation_regex,
                        message=mark_safe(f"Values must match this regex: <code>{self.validation_regex}</code>")
                    )
                ]

        field.model = self
        field.label = str(self)
        if self.description:
            field.help_text = self.description

        return field