
    $                         d 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  eg d      Z eg d	      Z G d
 de      Z G d de      Z G d de      Zd Zd Zd Zd ZdededefdZy)zCUtilities for handling Compute DisksService and RegionDisksService.    )absolute_import)division)unicode_literals)Any)utils)Error)z
pd-extremez
cs-extremezhyperdisk-extremehyperdisk-balanced$hyperdisk-balanced-high-availability)zcs-throughputzhyperdisk-throughputr	   zhyperdisk-mlr
   c                       e Zd ZdZy)UnknownDiskResourceErrorzCRaised when a disk resource argument is neither regional nor zonal.N)__name__
__module____qualname____doc__     0lib/googlecloudsdk/api_lib/compute/disks_util.pyr   r   *   s    Kr   r   c                   V    e Zd ZdZd Zed        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zy)
_ZonalDiskz5A wrapper for Compute Engine DisksService API client.c                     || _         || _        |j                  xs |j                  j                  | _        || _        y N)	_disk_ref_clientdisksapitools_client_service	_messagesselfclientdisk_refmessagess       r   __init__z_ZonalDisk.__init__1   s3    DNDLLL@F$:$:$@$@DMDNr   c                      y)z@Gets the zonal operation collection of a compute disk reference.zcompute.zoneOperationsr   clss    r   GetOperationCollectionz!_ZonalDisk.GetOperationCollection7   s     $r   c                     | j                   S r   r   r   s    r   
GetServicez_ZonalDisk.GetService<       ==r   c                 j     | j                   j                  di | j                  j                         S )z0Gets the zonal compute disk get request message.r   )r   ComputeDisksGetRequestr   AsDictr*   s    r   GetDiskRequestMessagez _ZonalDisk.GetDiskRequestMessage?   s)    04>>00K4>>3H3H3JKKr   c                 X    | j                         }| j                  j                  |      S r   r0   r   Getr   request_msgs     r   GetDiskResourcez_ZonalDisk.GetDiskResourceC   %    ,,.K==[))r   c                 .    | j                   j                  S r   )r   ZoneSetLabelsRequestr*   s    r   GetSetLabelsRequestMessagez%_ZonalDisk.GetSetLabelsRequestMessageG   s    >>...r   c           	         | j                   j                  } || j                  j                  | j                  j                  | j                  j
                  | j                   j                  |j                  |            S )NlabelFingerprintlabels)projectresourcezonezoneSetLabelsRequest)r   ComputeDisksSetLabelsRequestr   r?   diskrA   r9   r=   r   rD   r>   reqs       r   GetSetDiskLabelsRequestMessagez)_ZonalDisk.GetSetDiskLabelsRequestMessageJ   sk    
..
5
5C&&$$^^  !^^@@!226 A C	D Dr   c                 T    t        j                  | j                  j                        S r   )compute_utilsZoneNameToRegionNamer   rA   r*   s    r   GetDiskRegionNamez_ZonalDisk.GetDiskRegionNameS   s    --dnn.A.ABBr   c                 F   | j                   j                  | j                  j                         | j                  j                  | j                  j
                  | j                   j                  |            }|j                  | j                  j                  d|fg      S )NresourcePolicies)rD   r?   rA   disksAddResourcePoliciesRequestAddResourcePolicies)
r   &ComputeDisksAddResourcePoliciesRequestr   Namer?   rA   DisksAddResourcePoliciesRequestMakeRequestsr   r   r   resource_policiesclient_to_make_requestadd_requests       r   MakeAddResourcePoliciesRequestz)_ZonalDisk.MakeAddResourcePoliciesRequestV   s    ..GG^^  "&&^^  (,	(	(:K	(	L H NK "..
,,

3[	ABD Dr   c                 F   | j                   j                  | j                  j                         | j                  j                  | j                  j
                  | j                   j                  |            }|j                  | j                  j                  d|fg      S )NrM   )rD   r?   rA   "disksRemoveResourcePoliciesRequestRemoveResourcePolicies)
r   )ComputeDisksRemoveResourcePoliciesRequestr   rR   r?   rA   "DisksRemoveResourcePoliciesRequestrT   r   r   r   rV   rW   remove_requests       r   !MakeRemoveResourcePoliciesRequestz,_ZonalDisk.MakeRemoveResourcePoliciesRequesta   s    ^^MM^^  "&&^^  +/>>	+	+=N	+	O N QN "..
,,

6	GHJ Jr   Nr   r   r   r   r#   classmethodr'   r+   r0   r6   r:   rG   rK   rY   ra   r   r   r   r   r   .   sK    = $ $L*/DC	D	Jr   r   c                   V    e Zd ZdZd Zed        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zy)_RegionalDiskz;A wrapper for Compute Engine RegionDisksService API client.c                 P    || _         || _        |j                  | _        || _        y r   )r   r   regionDisksr   r   r   s       r   r#   z_RegionalDisk.__init__p   s$    DNDL&&DMDNr   c                      y)Nzcompute.regionOperationsr   r%   s    r   r'   z$_RegionalDisk.GetOperationCollectionv   s    %r   c                     | j                   S r   r)   r*   s    r   r+   z_RegionalDisk.GetServicez   r,   r   c                 j     | j                   j                  di | j                  j                         S )Nr   )r   ComputeRegionDisksGetRequestr   r/   r*   s    r   r0   z#_RegionalDisk.GetDiskRequestMessage}   s0    64>>66 #
..


!# #r   c                 X    | j                         }| j                  j                  |      S r   r2   r4   s     r   r6   z_RegionalDisk.GetDiskResource   r7   r   c                 .    | j                   j                  S r   )r   RegionSetLabelsRequestr*   s    r   r:   z(_RegionalDisk.GetSetLabelsRequestMessage   s    >>000r   c           	         | j                   j                  } || j                  j                  | j                  j                  | j                  j
                  | j                   j                  |j                  |            S )Nr<   )r?   r@   regionregionSetLabelsRequest)r   "ComputeRegionDisksSetLabelsRequestr   r?   rD   rp   rn   r=   rE   s       r   rG   z,_RegionalDisk.GetSetDiskLabelsRequestMessage   sk    
..
;
;C&&$$~~$$#~~DD!226  E  C	D Dr   c                 .    | j                   j                  S r   )r   rp   r*   s    r   rK   z_RegionalDisk.GetDiskRegionName   s    >>   r   c                 F   | j                   j                  | j                  j                         | j                  j                  | j                  j
                  | j                   j                  |            }|j                  | j                  j                  d|fg      S )NrM   )rD   r?   rp   %regionDisksAddResourcePoliciesRequestrP   )
r   ,ComputeRegionDisksAddResourcePoliciesRequestr   rR   r?   rp   %RegionDisksAddResourcePoliciesRequestrT   r   rg   rU   s       r   rY   z,_RegionalDisk.MakeAddResourcePoliciesRequest   s    ..MM^^  "&&~~$$.2nn	.	.. 
/ 
0 N 1K "..
,,
"
"$9;	GHJ Jr   c                 F   | j                   j                  | j                  j                         | j                  j                  | j                  j
                  | j                   j                  |            }|j                  | j                  j                  d|fg      S )NrM   )rD   r?   rp   (regionDisksRemoveResourcePoliciesRequestr\   )
r   /ComputeRegionDisksRemoveResourcePoliciesRequestr   rR   r?   rp   (RegionDisksRemoveResourcePoliciesRequestrT   r   rg   r_   s       r   ra   z/_RegionalDisk.MakeRemoveResourcePoliciesRequest   s    ^^SS^^  "&&~~$$15	1	1. 
2 
0 T 1N "..
,,
"
"$<n	MNP Pr   Nrb   r   r   r   re   re   m   sI    C & &#*1D!
J
Pr   re   c                     | j                         dk(  ry| j                         dk(  ryt        dj                  | j                                     )a  Checks if a compute disk is zonal or regional.

  Args:
    disk_ref: the disk resource reference that is parsed from resource arguments
      to modify.

  Returns:
    Boolean, true when the compute disk resource to modify is a zonal compute
      disk resource, false when a regional compute disk resource.

  Raises:
    UnknownDiskResourceError: when the compute disk resource is not in the
      correct format.
  compute.disksTcompute.regionDisksFz'Unexpected disk resource argument of {})
Collectionr   format)r!   s    r   IsZonalr      sS    " o- 55
"1889L9L9NOQ Qr   c                 L    t        |       rt        || |      S t        || |      S )a  Gets the zonal or regional disk api info.

  Args:
    disk_ref: the disk resource reference that is parsed from resource
      arguments.
    client: the compute api_tools_client.
    messages: the compute message module.

  Returns:
    _ZonalDisk or _RegionalDisk.
  )r   r   re   )r!   r    r"   s      r   GetDiskInfor      s*     Xfh11844r   c                 :    | j                  d      d   }|t        v S )zCheck if the given disk type (name or URI) supports IOPS provisioning.

  Args:
    disk_type: name of URI of the disk type to be checked.

  Returns:
    Whether the disk_type supports IOPS provisioning.
  /)split_SUPPORTED_DISK_TYPES_IOPS	disk_typedisk_type_names     r   IsProvisioningTypeIopsr      s#     ??3'+.	5	55r   c                 :    | j                  d      d   }|t        v S )zCheck if the given disk type (name or URI) supports throughput provisioning.

  Args:
    disk_type: name of URI of the disk type to be checked.

  Returns:
    Boolean, true if the disk_type supports throughput provisioning, false
    otherwise.
  r   r   )r    _SUPPORTED_DISK_TYPES_THROUGHPUTr   s     r   IsProvisioningTypeThroughputr      s#     ??3'+.	;	;;r   r   r!   compute_holderc                 R   d}| r|j                         dk(  r6|j                  j                  | d|j                  |j                  d      }nH|j                         dk(  r5|j                  j                  | d|j                  |j
                  d      }|r|j                         S y)	a#  Get the disk type URI for a given disk type name and disk reference.

  Args:
    disk_type: name of the disk type.
    disk_ref: the disk resource reference that is parsed from resource
      arguments.
    compute_holder: the compute api_tools_client.

  Returns:
    The disk type URI.
  Nr}   zcompute.diskTypes)r?   rA   )
collectionparamsr~   zcompute.regionDiskTypes)r?   rp   )r   	resourcesParser?   rA   rp   SelfLink)r   r!   r   type_refs       r   GetDiskTypeUrir      s     (/))//
(!))mm 0 h 
			"7	7))//
.!))  0 h   	r   N)r   
__future__r   r   r   typingr   googlecloudsdk.api_lib.computer   rI   googlecloudsdk.core.exceptionsr   	frozensetr   r   r   objectr   re   r   r   r   r   strr   r   r   r   <module>r      s    J &  '  A 0& (   $- . $  Lu L<J <J~=PF =P@Q45$
6<""!"36"r   