class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, StatusFilterFormMixin, 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) 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)
class VLANFilterForm(BootstrapMixin, TenancyFilterForm, StatusFilterFormMixin, 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"}, ) role = DynamicModelMultipleChoiceField( queryset=Role.objects.all(), to_field_name="slug", required=False, null_option="None", ) tag = TagFilterField(model)
class ConfigContextForm(BootstrapMixin, forms.ModelForm): regions = DynamicModelMultipleChoiceField(queryset=Region.objects.all(), required=False) sites = DynamicModelMultipleChoiceField(queryset=Site.objects.all(), required=False) roles = DynamicModelMultipleChoiceField(queryset=DeviceRole.objects.all(), required=False) device_types = DynamicModelMultipleChoiceField(queryset=DeviceType.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", "schema", "is_active", "regions", "sites", "roles", "device_types", "platforms", "cluster_groups", "clusters", "tenant_groups", "tenants", "tags", "data", )
class VRFForm(BootstrapMixin, TenancyForm, CustomFieldModelForm, RelationshipModelForm): import_targets = DynamicModelMultipleChoiceField( queryset=RouteTarget.objects.all(), required=False) export_targets = DynamicModelMultipleChoiceField( queryset=RouteTarget.objects.all(), required=False) tags = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), required=False) class Meta: model = VRF fields = [ "name", "rd", "enforce_unique", "description", "import_targets", "export_targets", "tenant_group", "tenant", "tags", ] labels = { "rd": "RD", } help_texts = { "rd": "Route distinguisher in any format", }
class ClusterFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm): model = Cluster field_order = [ "q", "type", "region", "site", "group", "tenant_group", "tenant" ] q = forms.CharField(required=False, label="Search") type = DynamicModelMultipleChoiceField(queryset=ClusterType.objects.all(), to_field_name="slug", required=False) 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 = DynamicModelMultipleChoiceField( queryset=ClusterGroup.objects.all(), to_field_name="slug", required=False, null_option="None", ) tag = TagFilterField(model)
class ObjectChangeFilterForm(BootstrapMixin, forms.Form): model = ObjectChange q = forms.CharField(required=False, label="Search") time_after = forms.DateTimeField(label="After", required=False, widget=DateTimePicker()) time_before = forms.DateTimeField(label="Before", required=False, widget=DateTimePicker()) action = forms.ChoiceField( choices=add_blank_choice(ObjectChangeActionChoices), required=False, widget=StaticSelect2(), ) user_id = DynamicModelMultipleChoiceField( queryset=get_user_model().objects.all(), required=False, label="User", widget=APISelectMultiple(api_url="/api/users/users/", ), ) changed_object_type_id = DynamicModelMultipleChoiceField( queryset=ContentType.objects.all(), required=False, label="Object Type", widget=APISelectMultiple(api_url="/api/extras/content-types/", ), )
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Add add/remove tags fields self.fields["add_tags"] = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False) self.fields["remove_tags"] = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False)
class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm, RelationshipModelForm): untagged_vlan = DynamicModelChoiceField( queryset=VLAN.objects.all(), required=False, label="Untagged VLAN", display_field="display_name", brief_mode=False, query_params={ "site_id": "null", }, ) tagged_vlans = DynamicModelMultipleChoiceField( queryset=VLAN.objects.all(), required=False, label="Tagged VLANs", display_field="display_name", brief_mode=False, query_params={ "site_id": "null", }, ) tags = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), required=False) class Meta: model = VMInterface fields = [ "virtual_machine", "name", "enabled", "mac_address", "mtu", "description", "mode", "tags", "untagged_vlan", "tagged_vlans", ] widgets = {"virtual_machine": forms.HiddenInput(), "mode": StaticSelect2()} labels = { "mode": "802.1Q Mode", } help_texts = { "mode": INTERFACE_MODE_HELP_TEXT, } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) virtual_machine = VirtualMachine.objects.get( pk=self.initial.get("virtual_machine") or self.data.get("virtual_machine") ) # Add current site to VLANs query params site = virtual_machine.site if site: self.fields["untagged_vlan"].widget.add_query_param("site_id", site.pk) self.fields["tagged_vlans"].widget.add_query_param("site_id", site.pk)
class VLANGroupFilterForm(BootstrapMixin, CustomFieldFilterForm): model = VLANGroup 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"}, )
class ConfigContextFilterForm(BootstrapMixin, forms.Form): q = forms.CharField(required=False, label="Search") # FIXME(glenn) filtering by owner_content_type region = DynamicModelMultipleChoiceField(queryset=Region.objects.all(), to_field_name="slug", required=False) site = DynamicModelMultipleChoiceField(queryset=Site.objects.all(), to_field_name="slug", required=False) role = DynamicModelMultipleChoiceField(queryset=DeviceRole.objects.all(), to_field_name="slug", required=False) platform = DynamicModelMultipleChoiceField(queryset=Platform.objects.all(), to_field_name="slug", required=False) cluster_group = DynamicModelMultipleChoiceField( queryset=ClusterGroup.objects.all(), to_field_name="slug", required=False) cluster_id = DynamicModelMultipleChoiceField( queryset=Cluster.objects.all(), required=False, label="Cluster") tenant_group = DynamicModelMultipleChoiceField( queryset=TenantGroup.objects.all(), to_field_name="slug", required=False) tenant = DynamicModelMultipleChoiceField(queryset=Tenant.objects.all(), to_field_name="slug", required=False) tag = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), to_field_name="slug", required=False)
class VMInterfaceFilterForm(BootstrapMixin, CustomFieldFilterForm): model = VMInterface cluster_id = DynamicModelMultipleChoiceField(queryset=Cluster.objects.all(), required=False, label="Cluster") virtual_machine_id = DynamicModelMultipleChoiceField( queryset=VirtualMachine.objects.all(), required=False, label="Virtual machine", query_params={"cluster_id": "$cluster_id"}, ) enabled = forms.NullBooleanField(required=False, widget=StaticSelect2(choices=BOOLEAN_WITH_BLANK_CHOICES)) tag = TagFilterField(model)
class VRFFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm): model = VRF field_order = ["q", "import_target", "export_target", "tenant_group", "tenant"] q = forms.CharField(required=False, label="Search") import_target = DynamicModelMultipleChoiceField( queryset=RouteTarget.objects.all(), to_field_name="name", required=False ) export_target = DynamicModelMultipleChoiceField( queryset=RouteTarget.objects.all(), to_field_name="name", required=False ) tag = TagFilterField(model)
class VMInterfaceCreateForm(BootstrapMixin, InterfaceCommonForm): virtual_machine = DynamicModelChoiceField( queryset=VirtualMachine.objects.all()) name_pattern = ExpandableNameField(label="Name") enabled = forms.BooleanField(required=False, initial=True) mtu = forms.IntegerField( required=False, min_value=INTERFACE_MTU_MIN, max_value=INTERFACE_MTU_MAX, label="MTU", ) mac_address = forms.CharField(required=False, label="MAC Address") description = forms.CharField(max_length=100, required=False) mode = forms.ChoiceField( choices=add_blank_choice(InterfaceModeChoices), required=False, widget=StaticSelect2(), ) untagged_vlan = DynamicModelChoiceField( queryset=VLAN.objects.all(), required=False, display_field="display_name", brief_mode=False, query_params={ "site_id": "null", }, ) tagged_vlans = DynamicModelMultipleChoiceField( queryset=VLAN.objects.all(), required=False, display_field="display_name", brief_mode=False, query_params={ "site_id": "null", }, ) tags = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), required=False) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) virtual_machine = VirtualMachine.objects.get( pk=self.initial.get("virtual_machine") or self.data.get("virtual_machine")) # Add current site to VLANs query params site = virtual_machine.site if site: self.fields["untagged_vlan"].widget.add_query_param( "site_id", site.pk) self.fields["tagged_vlans"].widget.add_query_param( "site_id", site.pk)
class TenancyFilterForm(forms.Form): tenant_group = DynamicModelMultipleChoiceField( queryset=TenantGroup.objects.all(), to_field_name="slug", required=False, null_option="None", ) tenant = DynamicModelMultipleChoiceField( queryset=Tenant.objects.all(), to_field_name="slug", required=False, null_option="None", query_params={"group": "$tenant_group"}, )
class ProviderFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Provider 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, query_params={"region": "$region"}, ) asn = forms.IntegerField(required=False, label="ASN") tag = TagFilterField(model)
class ProviderNetworkFilterForm(BootstrapMixin, CustomFieldFilterForm): model = ProviderNetwork field_order = ["q", "provider_id"] q = forms.CharField(required=False, label="Search") provider_id = DynamicModelMultipleChoiceField( queryset=Provider.objects.all(), required=False, label="Provider") tag = TagFilterField(model)
class RelationshipAssociationFilterForm(BootstrapMixin, forms.Form): model = RelationshipAssociation relationship = DynamicModelMultipleChoiceField( queryset=Relationship.objects.all(), to_field_name="slug", required=False, ) source_type = MultipleContentTypeField( queryset=ContentType.objects.filter( FeatureQuery("relationships").get_query()).order_by( "app_label", "model"), required=False, label="Source Type", widget=StaticSelect2Multiple(), ) destination_type = MultipleContentTypeField( queryset=ContentType.objects.filter( FeatureQuery("relationships").get_query()).order_by( "app_label", "model"), required=False, label="Destination Type", widget=StaticSelect2Multiple(), )
class VirtualMachineBulkAddComponentForm(CustomFieldBulkCreateForm, BootstrapMixin, forms.Form): pk = forms.ModelMultipleChoiceField(queryset=VirtualMachine.objects.all(), widget=forms.MultipleHiddenInput()) name_pattern = ExpandableNameField(label="Name") tags = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), required=False) class Meta: nullable_fields = []
class SecretForm(BootstrapMixin, CustomFieldModelForm, RelationshipModelForm): """Create/update form for `Secret` objects.""" slug = SlugField() provider = forms.ChoiceField(choices=provider_choices, widget=StaticSelect2()) parameters = JSONField( help_text= 'Enter parameters in <a href="https://json.org/">JSON</a> format.') tags = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), required=False) class Meta: model = Secret fields = [ "name", "slug", "description", "provider", "parameters", "tags", ]
class IPAddressBulkAddForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), required=False, label="VRF", display_field="display_name", ) tags = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), required=False) class Meta: model = IPAddress fields = [ "address", "vrf", "status", "role", "dns_name", "description", "tenant_group", "tenant", "tags", ] widgets = { "role": StaticSelect2(), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["vrf"].empty_label = "Global"
class CircuitForm(BootstrapMixin, TenancyForm, CustomFieldModelForm, RelationshipModelForm): provider = DynamicModelChoiceField(queryset=Provider.objects.all()) type = DynamicModelChoiceField(queryset=CircuitType.objects.all()) comments = CommentField() tags = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), required=False) class Meta: model = Circuit fields = [ "cid", "type", "provider", "status", "install_date", "commit_rate", "description", "tenant_group", "tenant", "comments", "tags", ] help_texts = { "cid": "Unique circuit ID", "commit_rate": "Committed rate", } widgets = { "install_date": DatePicker(), }
class ClusterForm(BootstrapMixin, TenancyForm, CustomFieldModelForm, RelationshipModelForm): type = DynamicModelChoiceField(queryset=ClusterType.objects.all()) group = DynamicModelChoiceField(queryset=ClusterGroup.objects.all(), required=False) region = DynamicModelChoiceField(queryset=Region.objects.all(), required=False, initial_params={"sites": "$site"}) site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, query_params={"region_id": "$region"}, ) comments = CommentField() tags = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), required=False) class Meta: model = Cluster fields = ( "name", "type", "group", "tenant", "region", "site", "comments", "tags", )
class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm, RelationshipModelForm): vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), required=False, label="VRF", display_field="display_name", ) region = DynamicModelChoiceField(queryset=Region.objects.all(), required=False, initial_params={"sites": "$site"}) site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, null_option="None", query_params={"region_id": "$region"}, ) vlan_group = DynamicModelChoiceField( queryset=VLANGroup.objects.all(), required=False, label="VLAN group", null_option="None", query_params={"site_id": "$site"}, initial_params={"vlans": "$vlan"}, ) vlan = DynamicModelChoiceField( queryset=VLAN.objects.all(), required=False, label="VLAN", display_field="display_name", query_params={ "site_id": "$site", "group_id": "$vlan_group", }, ) role = DynamicModelChoiceField(queryset=Role.objects.all(), required=False) tags = DynamicModelMultipleChoiceField(queryset=Tag.objects.all(), required=False) class Meta: model = Prefix fields = [ "prefix", "vrf", "site", "vlan", "status", "role", "is_pool", "description", "tenant_group", "tenant", "tags", ] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["vrf"].empty_label = "Global"
class RouteTargetFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm): model = RouteTarget field_order = [ "q", "name", "tenant_group", "tenant", "importing_vrfs", "exporting_vrfs", ] q = forms.CharField(required=False, label="Search") importing_vrf_id = DynamicModelMultipleChoiceField( queryset=VRF.objects.all(), required=False, label="Imported by VRF") exporting_vrf_id = DynamicModelMultipleChoiceField( queryset=VRF.objects.all(), required=False, label="Exported by VRF") tag = TagFilterField(model)
class VMInterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditForm): pk = forms.ModelMultipleChoiceField(queryset=VMInterface.objects.all(), widget=forms.MultipleHiddenInput()) virtual_machine = forms.ModelChoiceField( queryset=VirtualMachine.objects.all(), required=False, disabled=True, widget=forms.HiddenInput(), ) enabled = forms.NullBooleanField(required=False, widget=BulkEditNullBooleanSelect()) mtu = forms.IntegerField( required=False, min_value=INTERFACE_MTU_MIN, max_value=INTERFACE_MTU_MAX, label="MTU", ) description = forms.CharField(max_length=100, required=False) mode = forms.ChoiceField( choices=add_blank_choice(InterfaceModeChoices), required=False, widget=StaticSelect2(), ) untagged_vlan = DynamicModelChoiceField( queryset=VLAN.objects.all(), required=False, display_field="display_name", brief_mode=False, query_params={ "site_id": "null", }, ) tagged_vlans = DynamicModelMultipleChoiceField( queryset=VLAN.objects.all(), required=False, display_field="display_name", brief_mode=False, query_params={ "site_id": "null", }, ) class Meta: nullable_fields = [ "mtu", "description", ] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Limit available VLANs based on the parent VirtualMachine if "virtual_machine" in self.initial: parent_obj = VirtualMachine.objects.filter(pk=self.initial["virtual_machine"]).first() site = getattr(parent_obj.cluster, "site", None) if site is not None: # Add current site to VLANs query params self.fields["untagged_vlan"].widget.add_query_param("site_id", site.pk) self.fields["tagged_vlans"].widget.add_query_param("site_id", site.pk)
class VirtualMachineFilterForm( BootstrapMixin, TenancyFilterForm, StatusFilterFormMixin, CustomFieldFilterForm, LocalContextFilterForm ): 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"}, ) platform = DynamicModelMultipleChoiceField( queryset=Platform.objects.all(), to_field_name="slug", required=False, null_option="None", ) 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)
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["status"] = DynamicModelMultipleChoiceField( required=False, queryset=Status.objects.all(), query_params={"content_types": self.model._meta.label_lower}, to_field_name="slug", ) self.order_fields(self.field_order) # Reorder fields again
class LocalContextFilterForm(forms.Form): local_context_data = forms.NullBooleanField( required=False, label="Has local config context data", widget=StaticSelect2(choices=BOOLEAN_WITH_BLANK_CHOICES), ) local_context_schema = DynamicModelMultipleChoiceField( queryset=ConfigContextSchema.objects.all(), to_field_name="slug", required=False )
class ConfigComplianceFilterForm(GoldenConfigurationFilterForm): """Filter Form for ConfigCompliance instances.""" model = ConfigCompliance device = DynamicModelMultipleChoiceField( queryset=Device.objects.filter(id__in=Subquery(ConfigCompliance.objects.distinct("device").values("device"))), to_field_name="name", required=False, null_option="None", )
class TenantFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Tenant q = forms.CharField(required=False, label="Search") group = DynamicModelMultipleChoiceField( queryset=TenantGroup.objects.all(), to_field_name="slug", required=False, null_option="None", ) tag = TagFilterField(model)