
    >Tf                     r   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d dlT d dl m!Z!m"Z"m#Z# d dl$m%Z% ddl&m'Z' ddl(m)Z) dZ* G d de          Z+ G d de+          Z, G d de          Z- G d de          Z.dS )     )extend_schema_field)serializers)DeviceSerializer)PlatformSerializer)DeviceRoleSerializer)SiteSerializer)InterfaceModeChoices)ConfigTemplateSerializer)IPAddressSerializer)VLANSerializer)VRFSerializer)VLAN)ChoiceFieldSerializedPKRelatedField)NetBoxModelSerializer)TenantSerializer)*)VirtualDiskVirtualMachineVMInterface)L2VPNTerminationSerializer   )ClusterSerializer)NestedVMInterfaceSerializer)VMInterfaceSerializerVirtualDiskSerializerVirtualMachineSerializer)VirtualMachineWithConfigContextSerializerc                      e Zd Z eed          Z edddd          Z edddd          Z	 e
dddd          Z eddd          Z edddd          Z eddd          Z eddd          Z eddd          Z eddd          Z edddd          Z ej        d          Z ej        d          Z G d	 d
          ZdS )r   F)choicesrequiredTN)nestedr!   
allow_nulldefaultr"   r!   r#   r"   	read_onlyr#   r'   c                       e Zd ZeZg dZdZdS )VirtualMachineSerializer.Meta)idurldisplay_urldisplaynamestatussiteclusterdeviceserialroletenantplatform
primary_ipprimary_ip4primary_ip6vcpusmemorydiskdescriptioncommentsconfig_templatelocal_context_datatagscustom_fieldscreatedlast_updatedinterface_countvirtual_disk_count)r+   r,   r.   r/   r>   N)__name__
__module____qualname__r   modelfieldsbrief_fields     T/var/www/html/netbox-4.1.3/netbox/virtualization/api/serializers_/virtualmachines.pyMetar*   0   s,        
 
 
 GrO   rQ   )rH   rI   rJ   r   VirtualMachineStatusChoicesr0   r   r1   r   r2   r   r3   r   r5   r   r6   r   r7   r   r8   r9   r:   r
   r@   r   IntegerFieldrF   rG   rQ   rN   rO   rP   r   r      s}       [!<uMMMF>$PTUUUDteVZ[[[GTEdTXYYYFteMMMDTEdTXYYYF!!$OOOH$$DDTRRRJ%%TEdSSSK%%TEdSSSK..dUW[eijjjO /k.>>>O11DAAAG G G G G G G G G GrO   r   c                       e Zd Z ej                    Z G d dej                  Z e ej	        d                    d             Z
dS )r   c                       e Zd Zg dZdS ).VirtualMachineWithConfigContextSerializer.Meta)r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   config_contextrD   rE   rF   rG   N)rH   rI   rJ   rL   rN   rO   rP   rQ   rV   >   s        
 
 
rO   rQ   T)r#   c                 *    |                                 S )N)get_config_context)selfobjs     rP   rY   z<VirtualMachineWithConfigContextSerializer.get_config_contextF   s    %%'''rO   N)rH   rI   rJ   r   SerializerMethodFieldrW   r   rQ   r   	JSONFieldrY   rN   rO   rP   r   r   ;   s        6[688N
 
 
 
 
', 
 
 
 ..$???@@( ( A@( ( (rO   r   c                       e Zd Z ed          Z edd          Z edd          Z ee	dd          Z
 eddd          Z eej                                        eddd          Z eddd          Z eddd          Z ej        d	          Z ej        d	          Z ej        dd
d          Z G d d          Z fdZ xZS )r   Tr"   F)r!   r#   )r    allow_blankr!   r%   )queryset
serializerr"   r!   manyr&   r(   N)r!   r$   r#   c                       e Zd ZeZg dZdZdS )VMInterfaceSerializer.Meta)r+   r,   r-   r.   virtual_machiner/   enabledparentbridgemtumac_addressr>   modeuntagged_vlantagged_vlansvrfl2vpn_terminationrB   rC   rD   rE   count_ipaddressescount_fhrp_groups)r+   r,   r.   rf   r/   r>   N)rH   rI   rJ   r   rK   rL   rM   rN   rO   rP   rQ   re   f   s,        
 
 

 ZrO   rQ   c                    | j         r| j         j        n|                    d          }|                    dg           D ],}|j        |j        d fvrt	          j        dd| di          -t                                          |          S )Nrf   rn   zVLAN z^ must belong to the same site as the interface's parent virtual machine, or it must be global.)instancerf   getr1   r   ValidationErrorsupervalidate)rZ   datarf   vlan	__class__s       rP   rx   zVMInterfaceSerializer.validateo   s     <@=i$-77dhhWhNiNiHH^R00 	 	Dy!5t <<<!1" %FD %F %F %F3    = ww%%%rO   )rH   rI   rJ   r   rf   r   rh   ri   r   r	   rl   r   rm   r   r   objectsallrn   r   ro   r   rp   r   rS   rq   rr   	CharFieldrk   rQ   rx   __classcell__)r{   s   @rP   r   r   O   s       ..d;;;O((%DIIIF((%DIIIF;3PUVVVD"N$4PPPM++!!##!  L -te
E
E
EC22$$[_```004@@@004@@@'+'  KZ Z Z Z Z Z Z Z& & & & & & & & &rO   r   c                   @    e Zd Z ed          Z G d d          ZdS )r   Tr_   c                       e Zd ZeZg dZdZdS )VirtualDiskSerializer.Meta)r+   r,   r-   r.   rf   r/   r>   sizerB   rC   rD   rE   )r+   r,   r.   rf   r/   r>   r   N)rH   rI   rJ   r   rK   rL   rM   rN   rO   rP   rQ   r      s,        
 
 
 brO   rQ   N)rH   rI   rJ   r   rf   rQ   rN   rO   rP   r   r      sY        ..d;;;Ob b b b b b b b b brO   r   N)/drf_spectacular.utilsr   rest_frameworkr   dcim.api.serializers_.devicesr   dcim.api.serializers_.platformsr   dcim.api.serializers_.rolesr   dcim.api.serializers_.sitesr   dcim.choicesr	   'extras.api.serializers_.configtemplatesr
   ipam.api.serializers_.ipr   ipam.api.serializers_.vlansr   ipam.api.serializers_.vrfsr   ipam.modelsr   netbox.api.fieldsr   r   netbox.api.serializersr    tenancy.api.serializers_.tenantsr   virtualization.choicesvirtualization.modelsr   r   r   vpn.api.serializers_.l2vpnr   clustersr   r"   r   __all__r   r   r   r   rN   rO   rP   <module>r      sI   5 5 5 5 5 5 & & & & & & : : : : : : > > > > > > < < < < < < 6 6 6 6 6 6 - - - - - - L L L L L L 8 8 8 8 8 8 6 6 6 6 6 6 4 4 4 4 4 4       C C C C C C C C 8 8 8 8 8 8 = = = = = = $ $ $ $ J J J J J J J J J J A A A A A A ' ' ' ' ' ' / / / / / /G G G G G4 G G G8( ( ( ( (0H ( ( ((+& +& +& +& +&1 +& +& +&d	b 	b 	b 	b 	b1 	b 	b 	b 	b 	brO   