add device test template

This commit is contained in:
IluaAir
2025-10-06 17:21:10 +03:00
parent dd851d388c
commit 7e8b74f3b8

View File

@@ -2,6 +2,7 @@ import re
from tenancy.models import Tenant, TenantGroup, Contact, ContactRole, ContactAssignment from tenancy.models import Tenant, TenantGroup, Contact, ContactRole, ContactAssignment
from ipam.models import Prefix, VRF, Role from ipam.models import Prefix, VRF, Role
from dcim.models import DeviceType, DeviceRole, Device
from extras.scripts import Script, StringVar, IPNetworkVar, ChoiceVar, ObjectVar from extras.scripts import Script, StringVar, IPNetworkVar, ChoiceVar, ObjectVar
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from extras.models import CustomField from extras.models import CustomField
@@ -135,22 +136,29 @@ class CreateTenant(Script):
) )
prefix_cidr = IPNetworkVar( prefix_cidr = IPNetworkVar(
label="Префикс для оператора (CIDR) указывается с маской подсети" label="Префикс для оператора (CIDR)",
description="Указывается с маской подсети /xx",
) )
prefix_vrf = ObjectVar(label="VRF проекта", model=VRF, required=True) prefix_vrf = ObjectVar(label="VRF проекта", model=VRF, required=True)
prefix_role = ObjectVar(label="Роль", model=Role, required=True) prefix_role = ObjectVar(
label="Роль",
description="Роль для малых операторов IPMI-SSH-MGMT",
model=Role,
required=True,
)
prefix_description = StringVar(label="Описание префикса", required=False) prefix_description = StringVar(label="Описание префикса", required=False)
contacts_fio = StringVar(label="ФИО", required=False) contacts_fio = StringVar(
label="ФИО",
description="Указывается в формате Иванов Иван Иванович, остальные значения игнорируются при отсутсвии ФИО",
required=False,
)
contacts_phone = StringVar(label="Номер тел.", required=False) contacts_phone = StringVar(label="Номер тел.", required=False)
contacts_email = StringVar(label="E-mail", required=False) contacts_email = StringVar(label="E-mail", required=False)
contacts_role = ObjectVar(label="Роль контакта", model=ContactRole, required=False) contacts_role = ObjectVar(label="Роль контакта", model=ContactRole, required=False)
def check_tenant_exists(self, data): def check_tenant_exists(self, data):
if Tenant.objects.filter(name=data["tenant_name"]).exists(): if Tenant.objects.filter(name=data["tenant_name"]).exists():
self.log_failure(
f"Оператор с именем '{data['tenant_name']}' уже существует"
)
raise ValidationError( raise ValidationError(
f"Оператор с именем '{data['tenant_name']}' уже существует" f"Оператор с именем '{data['tenant_name']}' уже существует"
) )
@@ -266,9 +274,47 @@ class CreateTenant(Script):
except ValidationError as e: except ValidationError as e:
self.log_failure(f"Ошибка валидации: {e}") self.log_failure(f"Ошибка валидации: {e}")
except ValidationError as e: except ValidationError as e:
self.log_failure(f"Ошибка валидации: {e}") raise AbortScript(f"Ошибка валидации: {e}")
raise e
except Exception as e: except Exception as e:
self.log_failure(f"Ошибка при выполнении скрипта: {e}") self.log_failure(f"Ошибка при выполнении скрипта: {e}")
if commit: if commit:
self.log_failure("Изменения отменены из-за ошибки") self.log_failure("Изменения отменены из-за ошибки")
raise
class CreateDevice(Script):
class Meta:
name = "Создание устройства"
description = "Создание устройства и привязка к оператору"
scheduling_enabled = False
fieldsets = (
(
"Устройство",
(
"device_name",
"device_type",
"device_role",
"device_description",
"device_tenant",
),
),
)
device_name = StringVar(label="Имя устройства")
device_role = ObjectVar(label="Роль устройства", model=DeviceRole, required=True)
device_type = ObjectVar(label="Тип устройства", model=DeviceType, required=True)
device_description = StringVar(label="Описание устройства", required=False)
device_tenant_group = ObjectVar(
label="Группа оператора", model=TenantGroup, required=True
)
device_tenant = ObjectVar(
label="Оператор",
model=Tenant,
required=True,
query_params={
"group_id": "$device_tenant_group",
},
)
def run(self, data, commit):
pass