
    ,                     r   S r SSKJr  SSKJr  SSKJr  SSKrSSKJr  SSKJ	r	  SSK
Jr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSSS.r\R(                  " \R*                  R,                  \R*                  R.                  \R*                  R0                  5       " S S\R2                  5      5       r\\l        g)z#Command for suspending an instance.    )absolute_import)division)unicode_literalsN)base_classes)poller)waiter)base)flags)
exceptions)logz#Suspend a virtual machine instance.a          *{command}* is used to suspend a Compute Engine virtual machine.
        Suspending a VM is the equivalent of sleep or standby mode: the guest
        receives an ACPI S3 suspend signal, after which all VM state is saved to
        temporary storage. An instance can only be suspended while it is in the
        RUNNING state. A suspended instance will be put in SUSPENDED state.

        Note: A suspended instance can be resumed by running the gcloud compute
        instances resume command.

        If a VM has any attached Local SSD disks, you can preserve the Local SSD
        data when you suspend the VM by setting `--discard-local-ssd=False`.
        Preserving the Local SSD disk data incurs costs and is subject to
        limitations.

        Limitations:

         - Limitations for suspending a VM: https://cloud.google.com/compute/docs/instances/suspend-resume-instance#limitations
         - Limitations for preserving Local SSD data: https://cloud.google.com/compute/docs/disks/local-ssd#stop_instance
        a@          To suspend an instance named ``test-instance'', run:

          $ {command} test-instance

        To suspend an instance named `test-instance` that has a Local SSD, run:

          $ {command} test-instance --discard-local-ssd=True

        Using `--discard-local-ssd` without a value defaults to `True`.
      )briefDESCRIPTIONEXAMPLESc                   4    \ rS rSrSr\S 5       rS rS rSr	g)SuspendF   am  Suspend a virtual machine instance.

*{command}* is used to suspend a Compute Engine virtual machine.
Suspending a VM is the equivalent of sleep or standby mode:
the guest receives an ACPI S3 suspend signal, after which all VM state
is saved to temporary storage.  An instance can only be suspended while
it is in the RUNNING state.  A suspended instance will be put in
SUSPENDED state.

Note: A suspended instance can be resumed by running the
`gcloud compute instances resume` command.

Limitations: See this feature's restrictions at
https://cloud.google.com/compute/docs/instances/suspend-resume-instance#limitations
c           	          [         R                  R                  U5        UR                  SSS SS SS9  [        R
                  R                  U5        g )Nz--discard-local-ssd?Tc                 f    [         R                  " U R                  5       R                  5       5      $ N)astliteral_evallower
capitalize)xs    (lib/surface/compute/instances/suspend.py<lambda>Suspend.Args.<locals>.<lambda>c   s    s''	(<(<(>?    z,If set to true, local SSD data is discarded.)nargsdefaultconsttypehelp)r
   INSTANCES_ARGAddArgumentadd_argumentr	   
ASYNC_FLAGAddToParser)clsparsers     r   ArgsSuspend.ArgsY   sR    	##F+
 @<  ? 	OO'r   c                 ~    UR                   R                  UUR                  5       UR                  UR                  S9$ )N)discardLocalSsdinstanceprojectzone)messagesComputeInstancesSuspendRequestNamer1   r2   )selfclientinstance_refdiscard_local_ssds       r   _CreateSuspendRequestSuspend._CreateSuspendRequestg   s?    ??99)""$$$	 :    r   c           
         [         R                  " U R                  5       5      nUR                  n[        R
                  R                  UUR                  [        R                  " U5      S9n/ nU HE  nUR                  UR                  R                  SU R                  X6UR                  5      45        MG     / nUR                  XW5      nU(       a  [        R                   " U5      eU V	s/ s H'  oR                  R#                  U	R$                  5      PM)     n
n	UR&                  (       af  U
 H?  n[(        R*                  R-                  SR/                  UR1                  5       5      5        MA     [(        R*                  R-                  S5        U$ [2        R4                  " UUR                  R                  U5      n[6        R8                  " U[2        R:                  " U
5      SR/                  SR=                  S U 5       5      5      S S9nU H1  n[(        R*                  R-                  S	R/                  U5      5        M3     U$ s  sn	f )
N)scope_listerr   z&Suspend instance in progress for [{}].z]Use [gcloud compute operations describe URI] command to check the status of the operation(s).zSuspending instance(s) {0}z, c              3   @   #    U  H  oR                  5       v   M     g 7fr   )r5   ).0is     r   	<genexpr>Suspend.Run.<locals>.<genexpr>   s      6-+FFHHms   )max_wait_mszUpdated [{0}].)r   ComputeApiHolderReleaseTrackr7   r
   r%   ResolveAsResource	resourcesGetInstanceZoneScopeListerappendapitools_client	instancesr:   r9   AsyncRequestsr   
MultiErrorParseselfLinkasync_r   statusPrintformatSelfLinkr   BatchPollerr   WaitForOperationBatchjoin)r6   argsholderr7   instance_refsrequestsr8   errors_to_collect	responsesroperation_refsoperation_refoperation_pollerresults                 r   RunSuspend.Runn   s   **4+<+<+>?F]]F''9955f= : ?M
 H%oov--7711&262H2HJK L &
 $$XAI!!"344BKL)Q&&,,QZZ8)NL{{)-

AHH""$& 	' * 
jj() ))&*0*@*@*J*J*79 ^^n-$++DII 6-+6- -- 	.F &	jj'..|<= & M3 Ms   /.I N)
__name__
__module____qualname____firstlineno____doc__classmethodr,   r:   rd   __static_attributes__rf   r   r   r   r   F   s%      ( ( -r   r   )rk   
__future__r   r   r   r   googlecloudsdk.api_lib.computer   )googlecloudsdk.api_lib.compute.operationsr   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper	   ,googlecloudsdk.command_lib.compute.instancesr
   googlecloudsdk.corer   r   DETAILED_HELPReleaseTracksrE   ALPHABETAGASilentCommandr   detailed_helprf   r   r   <module>r|      s    * &  ' 
 7 < . ( > * # 	.	*
	
3$N D%%++T->->-C-C%%((*Sd   S*Sl & r   