
    ;                         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  G d dej                         Zy)zUpdate an ekmconnection.    )absolute_import)division)unicode_literals)base)
exceptions)certs)flags)maps)resource_argsc                   2    e Zd ZdZed        Zd Zd Zd Zy)Updatea  Update an ekmconnection.

  {command} can be used to update the ekmconnection. Updates can be made to the
  ekmconnection's service resolver's fields.

  ## EXAMPLES

  The following command updates an ekm-connection named `laplace` service
  resolver's hostname within location `us-east1`:

  $ {command} laplace --location=us-east1 \
                      --hostname=newhostname.foo

  The following command updates an ekm-connection named `laplace` service
  resolver's service_directory_service, endpoint_filter, hostname, and
  server_certificates within location `us-east1`:

    $ {command} laplace --location=us-east1 \
        --service-directory-service="foo" \
        --endpoint-filter="foo > bar" \
        --hostname="newhostname.foo" \
        --server-certificates-files=foo.pem,bar.pem

  The following command updates an ekm-connection named `laplace`
  key_management_mode within location `us-east1`:

  $ {command} laplace --location=us-east1 \
                      --key-management-mode=manual

  c                    t        j                  | dd       t        j                  |        t        j                  |        t        j
                  |        t        j                  |        t        j                  |        y )NTekm_connection)r   $AddKmsEkmConnectionResourceArgForKMSr	   AddServiceDirectoryServiceFlagAddEndpointFilterFlagAddHostnameFlagAddKeyManagementModeFlagsAddServerCertificatesFilesFlag)parsers    )lib/surface/kms/ekm_connections/update.pyArgszUpdate.Args?   s^    66vt7GI	((0	'	&!	##F+	((0    c                    g }|j                   s$|j                  s|j                  s|j                  r|j	                  d       |j
                  r|j	                  d       |j                  r|j	                  d       dj                  |      S )NserviceResolverskeyManagementModecryptoSpacePath,)service_directory_serviceendpoint_filterhostnameserver_certificates_filesappendkey_management_modecrypto_space_pathjoin)selfargsupdate_masks      r   CreateUpdateMaskzUpdate.CreateUpdateMaskI   su    K&&$*>*>77+,,-*+88K  r   c           	      <   t        j                  |      }|j                  d   }|j                  r|j                  |_        |j
                  r|j
                  |_        |j                  r|j                  |_        |j                  r.t        j                  j                  |j                        |_        |j                  r|j                  |_        g }|j                  rM|j                  D ]7  }	 |j!                  |j#                  t%        j&                  |                   9 ||_        |j3                  |j5                         |      }	| j7                  |      |	_        |	S # t(        $ r+}t+        j,                  ddj/                  ||            d }~ww xY w)Nr   )rawDerz--server-certificates-filesz+Error while attempting to read file {} : {})nameekmConnection)r	   ParseEkmConnectionNamer   r   serviceDirectoryServicer    endpointFilterr!   r$   r
   KEY_MANAGEMENT_MODE_MAPPERGetEnumForChoicer   r%   r   r"   r#   Certificater   GetDerCertificate	Exceptionr   BadArgumentExceptionformatserverCertificates3CloudkmsProjectsLocationsEkmConnectionsPatchRequestRelativeNamer*   
updateMask)
r'   r(   messagesekm_connection_to_updateec_refservice_resolver_to_updatecertificate_list	cert_fileereqs
             r   CreateRequestzUpdate.CreateRequestT   s   ))$/F!9!J!J1!M%%;?;Y;Y 8262F2F /}},0MM )

)
)
:
:&&( 0 151G1G.%%55)	!

!
!""%*A*A)*L"MO 6 7G 3

F
F  "2J G LC **40CNJ  	!//+;BBQ ! !	!s   14E''	F0&FFc                    |j                   sQ|j                  sE|j                  s9|j                  s-|j                  s!|j
                  st        j                  d      t        j                         }t        j                         }t        j                  |      }|j                  j                  |j                  |j!                                     }| j#                  |||      }|j                  j%                  |      S )NzAn error occured: At least one of --service-directory-service or --endpoint-filter or --hostname or --server-certificates-files or --key-management-mode or --crypto-space-path must be specified.)r-   )r   r    r!   r"   r$   r%   kms_exceptionsUpdateErrorcloudkms_baseGetClientInstanceGetMessagesModuler	   r/   !projects_locations_ekmConnectionsGet1CloudkmsProjectsLocationsEkmConnectionsGetRequestr;   rE   Patch)r'   r(   clientr=   r?   r   
update_reqs          r   Runz
Update.Run}   s    **d.B.BMMT;;$$(>(>&&LM M
 ,,.F..0H))$/F ==AABB$$& 	C 	()N
 ##D(NCJ3399*EEr   N)	__name__
__module____qualname____doc__staticmethodr   r*   rE   rR    r   r   r   r      s,    > 1 1	!'RFr   r   N)rV   
__future__r   r   r   googlecloudsdk.api_lib.cloudkmsr   rI   googlecloudsdk.callioper   googlecloudsdk.command_lib.kmsr   rG   r	   r
   r   UpdateCommandr   rX   r   r   <module>r^      sA     &  ' A ( . 0 G 0 / 8sFT sFr   