diff --git a/add_tenant_with_prefix.py b/add_tenant_with_prefix.py index 6826133..31ae641 100644 --- a/add_tenant_with_prefix.py +++ b/add_tenant_with_prefix.py @@ -2,6 +2,7 @@ import re from tenancy.models import Tenant, TenantGroup, Contact, ContactRole, ContactAssignment from ipam.models import Prefix, VRF, Role +from dcim.models import DeviceType, DeviceRole, Device from extras.scripts import Script, StringVar, IPNetworkVar, ChoiceVar, ObjectVar from django.core.exceptions import ValidationError from extras.models import CustomField @@ -135,22 +136,29 @@ class CreateTenant(Script): ) prefix_cidr = IPNetworkVar( - label="Префикс для оператора (CIDR) указывается с маской подсети" + label="Префикс для оператора (CIDR)", + description="Указывается с маской подсети /xx", ) 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) - contacts_fio = StringVar(label="ФИО", required=False) + contacts_fio = StringVar( + label="ФИО", + description="Указывается в формате Иванов Иван Иванович, остальные значения игнорируются при отсутсвии ФИО", + required=False, + ) contacts_phone = StringVar(label="Номер тел.", required=False) contacts_email = StringVar(label="E-mail", required=False) contacts_role = ObjectVar(label="Роль контакта", model=ContactRole, required=False) def check_tenant_exists(self, data): if Tenant.objects.filter(name=data["tenant_name"]).exists(): - self.log_failure( - f"Оператор с именем '{data['tenant_name']}' уже существует" - ) raise ValidationError( f"Оператор с именем '{data['tenant_name']}' уже существует" ) @@ -266,9 +274,47 @@ class CreateTenant(Script): except ValidationError as e: self.log_failure(f"Ошибка валидации: {e}") except ValidationError as e: - self.log_failure(f"Ошибка валидации: {e}") - raise e + raise AbortScript(f"Ошибка валидации: {e}") except Exception as e: self.log_failure(f"Ошибка при выполнении скрипта: {e}") if commit: 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