
    >Tf                         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T d
Z G d de          Z G d dee          Z G d dee          ZdS )    )GenericRelation)ValidationError)models)reverse)gettext_lazy)Device)OrganizationalModelPrimaryModel)ContactsMixin)*)ClusterClusterGroupClusterTypec                   2    e Zd ZdZ G d d          Zd ZdS )r   z
    A type of Cluster.
    c                   >    e Zd ZdZ ed          Z ed          ZdS )ClusterType.Metanamezcluster typezcluster typesN__name__
__module____qualname__ordering_verbose_nameverbose_name_plural     C/var/www/html/netbox-4.1.3/netbox/virtualization/models/clusters.pyMetar      s4        q((a00r   r    c                 0    t          d| j        g          S )Nzvirtualization:clustertypeargsr   pkselfs    r   get_absolute_urlzClusterType.get_absolute_url   s    347)DDDDr   N)r   r   r   __doc__r    r(   r   r   r   r   r      sZ         1 1 1 1 1 1 1 1
E E E E Er   r   c                   P    e Zd ZdZ edddd          Z G d d          Zd	 Zd
S )r   z.
    An organizational group of Clusters.
    ipam.VLANGroup
scope_typescope_idcluster_grouptocontent_type_fieldobject_id_fieldrelated_query_namec                   >    e Zd ZdZ ed          Z ed          ZdS )ClusterGroup.Metar   zcluster groupzcluster groupsNr   r   r   r   r    r5   +   s5        q))a 011r   r    c                 0    t          d| j        g          S )Nzvirtualization:clustergroupr"   r$   r&   s    r   r(   zClusterGroup.get_absolute_url0   s    4DG9EEEEr   N)r   r   r   r)   r   vlan_groupsr    r(   r   r   r   r   r       s~          "/'"*	  K2 2 2 2 2 2 2 2
F F F F Fr   r   c                       e Zd ZdZ ej         ed          d          Z ej         ed          e	ej
        d          Z ej        eej
        ddd	          Z ej         ed
          deej                  Z ej        dej
        ddd	          Z ej        dej
        ddd	          Z edddd          ZdZdZ G d d          Zd Zd Zd Z fdZ xZS )r   zk
    A cluster of VirtualMachines. Each Cluster may optionally be associated with one or more Devices.
    r   d   )r   
max_lengthtypeclusters)r   r0   	on_deleterelated_nameT)r0   r=   r>   blanknullstatus2   )r   r:   choicesdefaultztenancy.Tenantz	dcim.Siter+   r,   r-   clusterr/   )r;   grouprA   tenantsite)zvirtualization.ClusterTypec                       e Zd ZdgZ ej        dd           ej        dd          fZ ed          Z ed          Z	d	S )
Cluster.Metar   )rF   r   z)%(app_label)s_%(class)s_unique_group_name)fieldsr   )rH   r   z(%(app_label)s_%(class)s_unique_site_namerE   r<   N)
r   r   r   r   r   UniqueConstraintconstraintsr   r   r   r   r   r   r    rJ   m   sw        8#F#(@   $F#'?  	
 q||a
mmr   r    c                     | j         S Nr   r&   s    r   __str__zCluster.__str__|   s
    yr   c                 0    t          d| j        g          S )Nzvirtualization:clusterr"   r$   r&   s    r   r(   zCluster.get_absolute_url   s    /twi@@@@r   c                 J    t           j                            | j                  S rO   )ClusterStatusChoicescolorsgetrA   r&   s    r   get_status_colorzCluster.get_status_color   s    #*..t{;;;r   c                    t                                                       | j        j        s| j        rt
          j                            |                               | j                  	                                x}r<t          dt          d                              || j                  i          d S d S d S )N)rE   )rH   rH   zQ{count} devices are assigned as hosts for this cluster but are not in site {site})countrH   )superclean_stateaddingrH   r   objectsfilterexcluderX   r   r   format)r'   nonsite_devices	__class__s     r   rZ   zCluster.clean   s     {! 	di 	"(."7"7"7"E"E"M"MSWS\"M"]"]"c"c"e"ee %Ak f?fCC'   	 	 	 	 r   )r   r   r   r)   r   	CharFieldr   r   
ForeignKeyr   PROTECTr;   r   rF   rS   STATUS_ACTIVErA   rG   rH   r   r7   clone_fieldsprerequisite_modelsr    rP   r(   rV   rZ   __classcell__)rb   s   @r   r   r   4   s         6QvYY  D 6QvYY.	  D F.  E VQx[[$$2	  F V.  F 6.  D "/'"$	  KL, , , , , , , ,  A A A< < <
 
 
 
 
 
 
 
 
r   r   N)"django.contrib.contenttypes.fieldsr   django.core.exceptionsr   	django.dbr   django.urlsr   django.utils.translationr   r   dcim.modelsr   netbox.modelsr	   r
   netbox.models.featuresr   virtualization.choices__all__r   r   r   r   r   r   <module>rt      sV   > > > > > > 2 2 2 2 2 2             6 6 6 6 6 6       ; ; ; ; ; ; ; ; 0 0 0 0 0 0 $ $ $ $
E 
E 
E 
E 
E% 
E 
E 
EF F F F F="5 F F F([ [ [ [ [m\ [ [ [ [ [r   