
    >TfH/                        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mZmZmZmZmZ d dlmZ d dlmZmZmZmZ d d	lmZ d d
lmZ d dlmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*T dZ+ G d de          Z, G d de          Z- G d dee          Z. G d dej/                  Z0 G d de          Z1 G d dee          Z2 G d de          Z3 G d d e
e3          Z4 G d! d"e3          Z5d#S )$    )forms)ContentType)ValidationError)gettext_lazy)InterfaceCommonForm)Device
DeviceRolePlatformRackRegionSite	SiteGroup)ConfigTemplate)	IPAddressVLAN	VLANGroupVRF)NetBoxModelForm)TenancyForm)ConfirmationForm)CommentFieldDynamicModelChoiceFieldDynamicModelMultipleChoiceField	JSONField	SlugField)FieldSet)
HTMXSelect)*)ClusterAddDevicesFormClusterFormClusterGroupFormClusterRemoveDevicesFormClusterTypeFormVirtualDiskFormVirtualMachineFormVMInterfaceFormc            	       p    e Zd Z e            Z edddd ed                    fZ G d d          Zd	S )
r#   nameslugdescriptiontagszCluster Typer(   c                       e Zd ZeZdZdS )ClusterTypeForm.Metar(   r)   r*   r+   N)__name__
__module____qualname__ClusterTypemodelfields     E/var/www/html/netbox-4.1.3/netbox/virtualization/forms/model_forms.pyMetar.   '   s        
r7   r9   N	r0   r1   r2   r   r)   r   _	fieldsetsr9   r6   r7   r8   r#   r#       sr        9;;D 	QQ~=N=NOOOI
 
 
 
 
 
 
 
 
 
r7   r#   c            	       p    e Zd Z e            Z edddd ed                    fZ G d d          Zd	S )
r!   r(   r)   r*   r+   zCluster Groupr,   c                       e Zd ZeZdZdS )ClusterGroupForm.Metar/   N)r0   r1   r2   ClusterGroupr4   r5   r6   r7   r8   r9   r?   5   s        
r7   r9   Nr:   r6   r7   r8   r!   r!   .   sr        9;;D 	QQ=O=OPPPI
 
 
 
 
 
 
 
 
 
r7   r!   c                      e Zd Z e ed          ej                                                  Z e ed          e	j                                        d          Z
 e ed          ej                                        dd          Z e            Z ed	d
ddddd ed                     edd ed                    fZ G d d          ZdS )r    Type)labelquerysetGroupFrC   rD   requiredr   TrC   rD   rG   selectorr(   typegroupsitestatusr*   r+   Clusterr,   tenant_grouptenantTenancyc                       e Zd ZeZdZdS )ClusterForm.Meta)	r(   rJ   rK   rM   rP   rL   r*   commentsr+   N)r0   r1   r2   rN   r4   r5   r6   r7   r8   r9   rS   S   s        
r7   r9   N)r0   r1   r2   r   r;   r3   objectsallrJ   r@   rK   r   rL   r   rT   r   r<   r9   r6   r7   r8   r    r    <   sA       ""aii$((**  D $#ajj%))++  E
 #"aii!!##	  D |~~H 	&(M6XYXYZcXdXdeee)===I

 
 
 
 
 
 
 
 
 
r7   r    c                   *    e Zd Z e ed          ej                                        dd          Z e ed          e	j                                        dd          Z
 e ed          ej                                        dddd	
          Z e ed          ej                                        ddddi          Z e ed          ej                                        dddd          Z G d d          Z fdZ fdZ xZS )r   r   FNone)rC   rD   rG   null_optionz
Site groupr   z$regionz$site_group)	region_idgroup_idrC   rD   rG   query_paramsr   site_id$site)rC   rD   rG   rY   r]   Devicesz$racknull)r^   rack_id
cluster_id)rC   rD   r]   c                       e Zd Zg dZdS )ClusterAddDevicesForm.Meta)regionrL   rackdevicesN)r0   r1   r2   r5   r6   r7   r8   r9   re      s        
 
 
r7   r9   c                 l    || _          t                      j        |i | g | j        d         _        d S )Nrh   )clustersuper__init__r5   choices)selfrj   argskwargs	__class__s       r8   rl   zClusterAddDevicesForm.__init__   s;    $)&))))+I&&&r7   c           	      P   t                                                       | j        j        v| j                            dg           D ]\}|j        | j        j        k    rCt          dt          d                              ||j        | j        j                  i          [d S d S )Nrh   zV{device} belongs to a different site ({device_site}) than the cluster ({cluster_site}))devicedevice_sitecluster_site)	rk   cleanrj   rL   cleaned_datagetr   r;   format)rn   rs   rq   s     r8   rv   zClusterAddDevicesForm.clean   s     <(+//	2>> 
 
;$,"333)!1t$ $ &#)(.)-): !  +    4 )(
 
r7   )r0   r1   r2   r   r;   r   rU   rV   rf   r   
site_groupr   rL   r   rg   r   r   rh   r9   rl   rv   __classcell__rq   s   @r8   r   r   Z   s       $$akk##%%	  F )(aoo"&&((	  J #"aii!!##"%
 
	  D #"aii!!##w
  D .-a	ll##%% 
 
  G
 
 
 
 
 
 
 

, , , , ,        r7   r   c                   z    e Zd Z ej        ej                                         ej                              Z	dS )r"   )rD   widgetN)
r0   r1   r2   r   ModelMultipleChoiceFieldr   rU   rV   MultipleHiddenInputpkr6   r7   r8   r"   r"      sF        	'	'##%%(u(**
 
 
BBBr7   r"   c                       e Zd Z e ed          ej                                        d          Z e ed          e	j                                        dddddgi	          Z
 e ed
          ej                                        dddd ed                    Z e ed          ej                                        dddi          Z e ed          ej                                        dd          Z edd          Z eej                                        d ed                    Z e            Z edddddd ed                      ed!d"d# ed$                      ed%d& ed'                      ed(d)d*d+ ed,                      ed-d.d/ ed0                      ed1 ed2                     fZ G d3 d4          Z fd5Z xZS )6r%   r   FrF   rN   Tr^   r_   ra   )rC   rD   rG   rI   r]   r   z$cluster)rc   r^   zCOptionally pin this VM to a specific host device within the cluster)rC   rD   rG   r]   	help_textRolevm_roleTruer\   r
   rH    )rG   rC   zConfig templaterD   rG   rC   r(   rolerM   r*   serialr+   zVirtual Machiner,   rL   rj   rs   zSite/ClusterrO   rP   rQ   platformprimary_ip4primary_ip6config_template
Managementvcpusmemorydisk	Resourceslocal_context_datazConfig Contextc                       e Zd ZeZg dZdS )VirtualMachineForm.Meta)r(   rM   rL   rj   rs   r   rO   rP   r   r   r   r   r   r   r*   r   rT   r+   r   r   N)r0   r1   r2   VirtualMachiner4   r5   r6   r7   r8   r9   r      s$        
 
 
r7   r9   c                      t                      j        |i | | j        j        r| j        j                                        r9d| j        d         j        j        d<   t          d          | j        d         _
        dD ]1}dg}| j        j                            dd          }t          j                            |t           j                            t$                    |	          }|r#d
 |D             }|                    d|f           t          j                            d                              |t           j                            t$                    |          }|r#d |D             }|                    d|f           || j        d                    |                   _        3d S g | j        d         _        d| j        d         j        j        d<   g | j        d         _        d| j        d         j        j        d<   d S )NTr   disabledz9Disk size is managed via the attachment of virtual disks.)      )Nz	---------r   )flat)address__familyassigned_object_typeassigned_object_id__inc                 @    g | ]}|j         |j         d |j         dfS )z ())idaddressassigned_object.0ips     r8   
<listcomp>z/VirtualMachineForm.__init__.<locals>.<listcomp>  s6    gggSU"*'M'M8J'M'M'MNgggr7   zInterface IPs
nat_inside)r    nat_inside__assigned_object_type"nat_inside__assigned_object_id__inc                 0    g | ]}|j         |j         d fS )z (NAT))r   r   r   s     r8   r   z/VirtualMachineForm.__init__.<locals>.<listcomp>  s*    PPP""*'<'<'<=PPPr7   zNAT IPszprimary_ip{}r   readonlyr   )rk   rl   instancer   virtualdisksexistsr5   r~   attrsr;   r   
interfacesvalues_listr   rU   filterr   get_for_modelVMInterfaceappendprefetch_relatedry   rm   )
rn   ro   rp   family
ip_choicesinterface_idsinterface_ipsip_listnat_ipsrq   s
            r8   rl   zVirtualMachineForm.__init__   s!   $)&)))= (	G })0022 o?CF#*0<012m0n0nF#- ! P P12
 !% 8 D DTPT D U U !* 1 8 8$*)4)<)J)J;)W)W+8 !9 ! !
 ! BggYfgggG%%&@AAA#+<<\JJQQ$*5@5H5V5VWb5c5c7D R  
  <PPPPPG%%y'&:;;;EON11&99:BB1P P: 24DK&.BFDK&-3J?13DK&.BFDK&-3J???r7   )r0   r1   r2   r   r;   r   rU   rV   rL   rN   rj   r   rs   r	   r   r
   r   r   r   r   r   r   rT   r   r<   r9   rl   r{   r|   s   @r8   r%   r%      s       ""aii!!##  D
 &%a	ll$$&&(
  G %$akk##%%$
 
 !YZZ	 	 	F #"aii#''))v
	  D '&a
mm!%%''	  H #   .-'++--a!""  O
 |~~H 	=(FQRQRSdQeQefffH11^3D3DEEE)===]M;LSTSTUaSbSbccc(F;@@@%AA.>,?,?@@@I
 
 
 
 
 
 
 
+G +G +G +G +G +G +G +G +Gr7   r%   c                   z     e Zd Z e ed          ej                                        d          Z fdZ	 xZ
S )VMComponentFormzVirtual machineT)rC   rD   rI   c                 z     t                      j        |i | | j        j        rd| j        d         _        d S d S )NTvirtual_machine)rk   rl   r   r   r5   r   )rn   ro   rp   rq   s      r8   rl   zVMComponentForm.__init__%  sN    $)&))) = 	;6:DK)*333	; 	;r7   )r0   r1   r2   r   r;   r   rU   rV   r   rl   r{   r|   s   @r8   r   r     sr        --a!""'++--  O; ; ; ; ; ; ; ; ;r7   r   c                   T   e Zd Z eej                                        d ed          ddi          Z eej                                        d ed          ddi          Z	 ee
j                                        d ed                    Z eej                                        d ed	          d
dd          Z eej                                        d ed          d
dd          Z eej                                        d ed                    Z edddd ed                     edd ed                     edd ed                     edd ed                     edddd  ed!                    fZ G d" d#          Zd$S )%r&   FzParent interfacevirtual_machine_idz$virtual_machine)rD   rG   rC   r]   zBridged interfacez
VLAN groupr   zUntagged VLANz$vlan_group)r[   available_on_virtualmachinezTagged VLANsr   r   r(   r*   r+   	Interfacer,   vrfmac_address
Addressingmtuenabled	OperationparentbridgezRelated Interfacesmode
vlan_groupuntagged_vlantagged_vlansz802.1Q Switchingc                   :    e Zd ZeZg dZddiZd e            iZdS )VMInterfaceForm.Meta)r   r(   r   r   r   r   r   r*   r   r   r   r   r   r+   r   z802.1Q ModeN)	r0   r1   r2   r   r4   r5   labelsr   widgetsr6   r7   r8   r9   r   c  sF        
 
 

 M
 JJLL
r7   r9   N)r0   r1   r2   r   r   rU   rV   r;   r   r   r   r   r   r   r   r   r   r   r   r<   r9   r6   r7   r8   r&   r&   -  so       $$$((**a"## "4
	  F %$$((**a#$$ "4
	  F )("&&((aoo  J
 ,+!!##a  %+=
 
	  M 32!!##a%+=
 
	  L "
!""ahh  C 	"FM6+WWWAAlOO<<<	+7778!!,@*A*ABBBQQOaMbMbcccI
 
 
 
 
 
 
 
 
 
r7   r&   c            
       ^    e Zd Z eddddd ed                    fZ G d d	          Zd
S )r$   r   r(   sizer*   r+   Diskr,   c                       e Zd ZeZg dZdS )VirtualDiskForm.Meta)r   r(   r   r*   r+   N)r0   r1   r2   VirtualDiskr4   r5   r6   r7   r8   r9   r   w  s$        
 
 
r7   r9   N)r0   r1   r2   r   r;   r<   r9   r6   r7   r8   r$   r$   q  sm         	"FFM6PQPQRXPYPYZZZI
 
 
 
 
 
 
 
 
 
r7   r$   N)6djangor   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   django.utils.translationr   r;   dcim.forms.commonr   dcim.modelsr   r	   r
   r   r   r   r   extras.modelsr   ipam.modelsr   r   r   r   netbox.formsr   tenancy.formsr   utilities.formsr   utilities.forms.fieldsr   r   r   r   r   utilities.forms.renderingr   utilities.forms.widgetsr   virtualization.models__all__r#   r!   r    Formr   r"   r%   r   r&   r$   r6   r7   r8   <module>r      s1         : : : : : : 2 2 2 2 2 2 6 6 6 6 6 6 1 1 1 1 1 1 S S S S S S S S S S S S S S S S S S ( ( ( ( ( ( 7 7 7 7 7 7 7 7 7 7 7 7 ( ( ( ( ( ( % % % % % % , , , , , ,              / . . . . . . . . . . . # # # #	
 
 
 
 
o 
 
 

 
 
 
 
 
 
 

 
 
 
 
+ 
 
 
<E E E E EEJ E E EP    /   nG nG nG nG nGo nG nG nGj; ; ; ; ;o ; ; ;A
 A
 A
 A
 A
)? A
 A
 A
H

 

 

 

 

o 

 

 

 

 

r7   