
    W                     v   d Z ddlmZ ddlmZ ddlmZ ddl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dZe	j                    e	j"                  e	j$                  j&                  e	j$                  j(                  e	j$                  j*                         G d de	j,                                      Zee_        y)z Update deployment group command.    )absolute_import)division)unicode_literalsN)api)base)
exceptions)deployment_group_flags)labels_utilz
          Update a mirroring deployment group. Check the progress of deployment group update
          by using `gcloud network-security mirroring-deployment-groups list`.

          For examples refer to the EXAMPLES section below.
        a  
            To update labels k1 and k2, run:

            $ {command} my-deployment-group --project=my-project --location=global --update-labels=k1=v1,k2=v2

            To remove labels k3 and k4, run:

            $ {command} my-deployment-group --project=my-project --location=global --remove-labels=k3,k4

            To clear all labels from the mirroring deployment group, run:

            $ {command} my-deployment-group --project=my-project --location=global --clear-labels

            To update description to 'new description', run:

            $ {command} my-deployment-group --project=my-project --location=global --description="new description"
        )DESCRIPTIONEXAMPLESc                   @    e Zd ZdZg dZed        Zd Zd Zd Z	d Z
y)	Updatez$Update a Mirroring Deployment Group.)z--clear-labelsz--remove-labelsz--update-labelsc                 J   t        j                  | j                         |       t        j                  |d       t        j                  |       t
        j                  j                  |       t
        j                  j                  |d       t        j                  |       y )N20mT)r	   AddDeploymentGroupResourceReleaseTrack
AddMaxWaitAddDescriptionArgr   
ASYNC_FLAGAddToParser
SetDefaultr
   AddUpdateLabelsFlags)clsparsers     Blib/surface/network_security/mirroring_deployment_groups/update.pyArgszUpdate.ArgsE   sx    55F %% ,,V4OO'OOvt,$$V,    c           	      t   t        j                  | j                               }|j                  j                  j                         }|j                  |j                               }| j                  |       i }| j                  |||      }|r||d<   |st        j                  | j                        |j                  |j                         |t        |dd             }|j                  r|j!                  d      sd|_        |S | j%                  |||t'        j(                  |j*                              S )Nlabelsdescription)nameupdate_fieldsr    formatdefault)seconds)r   Clientr   CONCEPTSmirroring_deployment_groupParseDescribeDeploymentGroupRelativeName#_validate_original_deployment_group_process_label_updatesr   MinimumArgumentException_valid_argumentsUpdateDeploymentGroupgetattrasync_IsSpecifiedr#   _wait_for_operationdatetime	timedeltamax_wait)selfargsclientdeployment_grouporiginalr"   r   	operations           r   Runz
Update.RunS   s   ZZ))+,F}}??EEG--.>.K.K.MNH,,X6M((x@F &mH//0E0EFF,,**,#D-6 - I {{ h'##4==1	 r   c                 4    |t        j                  dd      y )Nzmirroring-deployment-groupz*Mirroring deployment group does not exist.)r   InvalidArgumentException)r8   r<   s     r   r,   z*Update._validate_original_deployment_groupw   s&    //
&
6  r   c                    t         j                  j                  |      }|j                         sy|j                  }|j                  |j                  j                  j                  |      }|j                  r|j                  }|S )aB  Processes the label update request.

    Args:
      client: the client to use to make the API call.
      args: the args from the command line.
      original_dg: the original mirroring deployment group.

    Returns:
      the labels we would like to update if there is any update. Otherwise,
      it returns None.
    N)
r
   DiffFromUpdateArgsMayHaveUpdatesr   ApplymessagesMirroringDeploymentGroupLabelsValueneeds_update)r8   r:   r9   original_dglabels_diffr   labels_updates          r   r-   zUpdate._process_label_updates~   su     ""11$7K%%'F%%00<<M !!##fMr   c                     |j                  |j                  |      dj                  |j                               d|      S )Nz9waiting for mirroring deployment group [{}] to be updatedF)operation_refmessage
has_resultr7   )WaitForOperationGetOperationRefr#   r+   )r8   r:   r=   r;   r7   s        r   r4   zUpdate._wait_for_operation   sJ    "",,Y7GNN --/  # 	 	r   N)__name__
__module____qualname____doc__r/   classmethodr   r>   r,   r-   r4    r   r   r   r   9   s8     - - -"H4
r   r   )rV   
__future__r   r   r   r5   Cgooglecloudsdk.api_lib.network_security.mirroring_deployment_groupsr   googlecloudsdk.callioper   r   +googlecloudsdk.command_lib.network_securityr	   $googlecloudsdk.command_lib.util.argsr
   DETAILED_HELPDefaultUniverseOnlyReleaseTracksr   ALPHABETAGAUpdateCommandr   detailed_helprX   r   r   <module>rf      s    ' &  '  S ( . N <6 D%%++T->->-C-C%%((*fT f* fR % r   