
    h                        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 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 ddlmZ ddlmZ ddlmZ ddlm Z  e
jB                   e
jD                  e
jF                  jH                         G d de
jJ                                      Z& e
jD                  e
jF                  jN                         G d de&             Z( e
jD                  e
jF                  jR                         G d de&             Z*y) z;Command for updating env vars and other configuration info.    )absolute_import)division)print_function)unicode_literals)
k8s_object)traffic_pair)base)display)config_changes)connection_context)
exceptions)flags)	platforms)pretty_print)resource_args)serverless_operations)stages)traffic_printer)concept_parsers)presentation_specs)
properties)progress_tracker)resource_printerc                   @    e Zd ZdZdddZed        Zed        Zd Zy)	AdjustTraffic7Adjust the traffic assignments for a Cloud Run service.z"          {description}
          a            To assign 10% of traffic to revision myservice-s5sxn and
          90% of traffic to revision myservice-cp9kw run:

              $ {command} myservice --to-revisions=myservice-s5sxn=10,myservice-cp9kw=90

          To increase the traffic to revision myservice-s5sxn to 20% and
          by reducing the traffic to revision myservice-cp9kw to 80% run:

              $ {command} myservice --to-revisions=myservice-s5sxn=20

          To rollback to revision myservice-cp9kw run:

              $ {command} myservice --to-revisions=myservice-cp9kw=100

          To assign 100% of traffic to the current or future LATEST revision
          run:

              $ {command} myservice --to-latest

          You can also refer to the current or future LATEST revision in
          --to-revisions by the string "LATEST". For example, to set 10% of
          traffic to always float to the latest revision:

              $ {command} myservice --to-revisions=LATEST=10

         )DESCRIPTIONEXAMPLESc                    t        j                  dt        j                  d      ddd      }t	        j
                  |       t	        j                  |       t	        j                  |       t        j                  |g      j                  |       t        j                  t        j                  t        j                  d       |j                   j#                  t        j                         y )NSERVICET)promptz'Service to update the configuration of.F)requiredprefixes)hidden)r   ResourcePresentationSpecr   GetServiceResourceSpecr   AddAsyncFlagAddUpdateTrafficFlagsAddTrafficTagsFlagsr   ConceptParserAddToParserr   RegisterFormatterr   TRAFFIC_PRINTER_FORMATTrafficPrinterdisplay_info	AddFormat)clsparserservice_presentations      *lib/surface/run/services/update_traffic.py
CommonArgszAdjustTraffic.CommonArgsS   s    -FF,,D91 
v	'	f%!!#7"89EEfM&&..&& !!/"H"HI    c                 &    | j                  |       y Nr5   r1   r2   s     r4   ArgszAdjustTraffic.Argsf       NN6r6   c                 X   t        j                  |t        j                  j                  | j                               }|j                  j                  j                         }t        j                  |       t        j                  |      }|st        j                  d      |j                  dt        j                  t         j"                               |j%                  t        j&                  | j                                      t)        j*                         t(        j,                  k(  }t/        j0                  |      5 }t3        j4                         }	 t7        j8                  d|d|j:                        5 }|j=                  ||||j:                  t>        j@                  jB                  jD                  jG                         dk(  | j                               }	ddd       |j:                  rta        jb                  d	       n`tK        jL                  	jN                  |	jP                  ||	jR                  jT                  |	jR                  jV                        }
|
cddd       S 	 ddd       y# 1 sw Y   xY w#  |jI                  |      }	|	rtK        jL                  |	jN                  |	jP                  ||	jR                  jT                  |	jR                  jV                        }
tY        jZ                  | ||
|j]                               j_                           xY w# 1 sw Y   yxY w)
zUpdate the traffic split for the service.

    Args:
      args: Args!

    Returns:
      List of traffic.TrafficTargetStatus instances reflecting the change.
    z*No traffic configuration change requested.r   zUpdating traffic...zUpdating traffic failed)failure_messagesuppress_outputdebugN)r/   z Updating traffic asynchronously.)2r   GetConnectionContextr   ProductRUNReleaseTrackCONCEPTSserviceParseValidateResourceGetServiceConfigurationChangesr   NoConfigurationChangeErrorinsertr   DeleteAnnotationChanger   BINAUTHZ_BREAKGLASS_ANNOTATIONappendSetLaunchStageAnnotationChanger   GetPlatformPLATFORM_MANAGEDr   Connectr   UpdateTrafficStagesr   StagedProgressTrackerasync_UpdateTrafficr   VALUEScore	verbosityGet
GetServicer   GetTrafficTargetPairsspec_trafficstatus_trafficstatuslatestReadyRevisionNameurlr
   	DisplayerGetDisplayInfoDisplayr   Success)selfargsconn_contextservice_refchanges
is_managedclientdeployment_stagestrackerserv	resourcess              r4   RunzAdjustTraffic.Runj   s    &::emm!2!2!46L--''--/K	;'2248G11
68 8NN	--55	78 NN55d6G6G6IJL &&(I,F,FFJ		&	&|	4 44633!5 KK	) -4%%kk$$..224?!#$)4 
?@ 66KK//KKOO	 M 
5	4< 	A= 
5	4) )  -"88!!kk11kkoo) 

D)..0229')7 
5	4s?   L #I=;A"I1I=%A8L 1I:	6I==B LL  L)N)	__name__
__module____qualname____doc__detailed_helpclassmethodr5   r;   rq    r6   r4   r   r   +   sJ     @!-F J J$  @r6   r   c                        e Zd ZdZed        Zy)BetaAdjustTrafficr   c                 &    | j                  |       y r8   r9   r:   s     r4   r;   zBetaAdjustTraffic.Args   r<   r6   Nrr   rs   rt   ru   rw   r;   rx   r6   r4   rz   rz      s    ? r6   rz   c                        e Zd ZdZed        Zy)AlphaAdjustTrafficr   c                 P    | j                  |       t        j                  |       y r8   )r5   r   AddBinAuthzBreakglassFlagr:   s     r4   r;   zAlphaAdjustTraffic.Args   s    NN6 
##F+r6   Nr|   rx   r6   r4   r~   r~      s    ?, ,r6   r~   N)+ru   
__future__r   r   r   r   googlecloudsdk.api_lib.runr   r   googlecloudsdk.callioper	   r
   googlecloudsdk.command_lib.runr   r   r   r   r   r   r   r   r   'googlecloudsdk.command_lib.run.printersr   (googlecloudsdk.command_lib.util.conceptsr   r   googlecloudsdk.corer   googlecloudsdk.core.consoler   googlecloudsdk.core.resourcer   UniverseCompatibleReleaseTracksrD   GACommandr   BETArz   ALPHAr~   rx   r6   r4   <module>r      s   B &  % ' 1 3 ( + 9 = 5 0 4 7 8 @ 1 C D G * 8 9 D%%(()}DLL } * }@ D%%**+  , D%%++,, , -,r6   