
    +                        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dZ ej2                  ej4                  j6                        ej8                   G d dej:                                      Z ej2                  ej4                  j>                  ej4                  j@                         G d de             Z!y)zImport backend service command.    )absolute_import)division)unicode_literals)
exceptions)base_classes)base)flags)backend_services_utils)util)yaml_validator)
console_iozG        Imports a backend service's configuration from a file.
        z{        A backend service can be imported by running:

          $ {command} NAME --source=<path-to-file> --global
        )DESCRIPTIONEXAMPLESc                   b    e Zd ZdZeZdZed        Zedd       Z	ed        Z
d Zd Zd Zd	 Zy
)ImportGA'  Import a backend service.

  If the specified backend service already exists, it will be overwritten.
  Otherwise, a new backend service will be created.
  To edit a backend service you can export the backend service to a file,
  edit its configuration, and then import the new configuration.
  Fc                     | j                         t        j                   j                  k(  ry| j                         t        j                   j                  k(  ryy)z3Returns the API version based on the release track.alphabetav1)ReleaseTrackr   ALPHABETA)clss    .lib/surface/compute/backend_services/import.pyGetApiVersionzImportGA.GetApiVersion<   sG     T..444				t0055	5    c                 P    t        j                  d| j                         d|      S )z!Returns the resource schema path.computeBackendServicefor_help)export_utilGetSchemaPathr   )r   r"   s     r   r$   zImportGA.GetSchemaPathE   s,     $$3$$&(88M Mr   c                     t         j                  j                  |d       t        j                  || j                  d             y )Nimport)operation_typeTr!   )r	   #GLOBAL_REGIONAL_BACKEND_SERVICE_ARGAddArgumentr#   AddImportFlagsr$   )r   parsers     r   ArgszImportGA.ArgsK   s>    	--99x : )vs'8'8$'8'GHr   c                 .   |j                         dk(  r{|j                  j                  }|j                  j                  j                  |j                  j                  |j                  |j                  |j                         |            }no|j                  j                  }|j                  j                  j                  |j                  j                  |j                  |j                         |            }t        j                  ||||d      S )a;  Sends a Backend Services patch request and waits for the operation to finish.

    Args:
      client: The API client.
      resources: The resource parser.
      backend_service_ref: The backend service reference.
      replacement: The backend service to patch with.

    Returns:
      The operation result.
    compute.regionBackendServices)projectregionbackendServicebackendServiceResource)r/   r1   r2   zUpdating backend service)
Collectionapitools_clientregionBackendServicesPatchmessages(ComputeRegionBackendServicesPatchRequestr/   r0   NamebackendServices"ComputeBackendServicesPatchRequestr
   WaitForOperation)selfclient	resourcesbackend_service_refreplacementservice	operations          r   SendPatchRequestzImportGA.SendPatchRequestQ   s     %%'+JJ&&<<g((>>DD
//
B
B)11(//0557%0	 C 23i &&66g((88>>
//
<
<)110557%0 = 23i "229g3<3F3MO Or   c                    |j                         dk(  rl|j                  j                  }|j                  j                  j                  |j                  j                  |j                  |j                  |            }n`|j                  j                  }|j                  j                  j                  |j                  j                  |j                  |            }t        j                  ||||d      S )a<  Sends a Backend Services insert request and waits for the operation to finish.

    Args:
      client: The API client.
      resources: The resource parser.
      backend_service_ref: The backend service reference.
      backend_service: The backend service to insert.

    Returns:
      The operation result.
    r.   )r/   r0   r1   )r/   r1   zCreating backend service)r3   r4   r5   Insertr7   )ComputeRegionBackendServicesInsertRequestr/   r0   r:   #ComputeBackendServicesInsertRequestr
   r<   )r=   r>   r?   r@   backend_servicerB   rC   s          r   SendInsertRequestzImportGA.SendInsertRequests   s     %%'+JJ&&<<g((>>EE
//
C
C)11(//, D ./i &&66g((88??
//
=
=)11, > ./i
 "229g3<3F3MO Or   c                    g }|j                   s|j                  d       |j                  s|j                  d       |j                  s|j                  d       |j                  s|j                  d       |j
                  s|j                  d       |j                  s|j                  d       |j                  s|j                  d       |j                  s|j                  d       |j                  r|j                  }|j                  |j                  d	       |j                  |j                  d
       |j                  |j                  d       |j                  s|j                  d       |j                  s|j                  d       |j                  |j                  d       |j                   #|j                  d       n|j                  d       |j"                  s|j                  d       |S |j"                  }|j$                  s|j                  d       |j&                  s|j                  d       |S |j&                  }|j(                  s|j                  d       |j*                  r)|j*                  j,                  s|j                  d       |S |j*                  s|j                  d       |S )zRetrieves a list of fields to clear for the backend service being inserted.

    Args:
      backend_service: The backend service being inserted.

    Returns:
      The the list of fields to clear for a GA resource.
    securitySettingslocalityLbPolicylocalityLbPoliciescircuitBreakersconsistentHashoutlierDetectioncustomRequestHeaderscustomResponseHeaderszcdnPolicy.defaultTtlzcdnPolicy.clientTtlzcdnPolicy.maxTtlzcdnPolicy.negativeCachingPolicyz%cdnPolicy.bypassCacheOnRequestHeaderszcdnPolicy.serveWhileStalezcdnPolicy.requestCoalescing	cdnPolicyhaPolicyzhaPolicy.fastIPMovezhaPolicy.leaderzhaPolicy.leader.backendGroupz(haPolicy.leader.networkEndpoint.instancezhaPolicy.leader.networkEndpoint)rL   appendrM   rN   rO   rP   rQ   rR   rS   rT   
defaultTtl	clientTtlmaxTtlnegativeCachingPolicybypassCacheOnRequestHeadersserveWhileStalerequestCoalescingrU   
fastIPMoveleaderbackendGroupnetworkEndpointinstance)r=   rI   cleared_fields
cdn_policy	ha_policyr_   s         r   GetClearedFieldListzImportGA.GetClearedFieldList   s{    N
 ++./++./--01**-.)),-++.///230034  ",,j				&45				%34				"01--?@33EF		#	#	+9:		%	%	-;<K(##J'  "**i!!34/0  !!""


 >
?!!&*@*@*I*I


 J
K  ''


 A
Br   c                 0   t        j                  | j                               }|j                  }|j                  }t
        j                  j                  ||t        j                  |            }t        j                  |j                  xs dd      }	 t        j                  |j                  j                   || j#                               }	 t-        j.                  ||      }	|	|k(  ry t        j8                  dj;                  |j=                               d	       |	j>                  |_        |	j@                  |_         | jC                  |      }|jD                  jG                  |      5  | jI                  ||||      cd d d        S # t$        j&                  $ r#}t)        j&                  t+        |            d }~ww xY w# t0        j2                  $ r/}
|
j4                  dk7  r|
| j7                  ||||      cY d }
~
S d }
~
ww xY w# 1 sw Y   y xY w)
N)scope_lister-F)binary)message_typestreamschema_pathi  z*Backend Service [{0}] will be overwritten.T)messagecancel_on_no)%r   ComputeApiHolderr   r>   r?   r	   r(   ResolveAsResourcecompute_flagsGetDefaultScopeListerr   ReadFromFileOrStdinsourcer#   Importr7   r    r$   r   ValidationErrorr   strr
   SendGetRequestapitools_exceptions	HttpErrorstatus_coderJ   PromptContinueformatr9   idfingerprintrf   r4   IncludeFieldsrD   )r=   argsholderr>   r?   r@   datarI   ebackend_service_olderrorrc   s               r   RunzImportGA.Run   s   **4+<+<+>?F]]F  I 	11CC&<<VD 	D 	F  ))$++*<UKD/#**55((*,o52AA
%' o-=EE$$&( -//O"5"A"AO --o>N				-	-n	=""696I#24 
>	=? )) /&&s1v../ (( 5			c	!##FI7J$35 5	50 
>	=sB   :F G 0HG!F??GH	$H>H	H	HN)F)__name__
__module____qualname____doc__DETAILED_HELPdetailed_help_support_negative_cacheclassmethodr   r$   r,   rD   rJ   rf   r    r   r   r   r   .   sl      -!  M M
 I I
 ODO@AF34r   r   c                       e Zd ZdZy)ImportAlphaBetar   N)r   r   r   r   r   r   r   r   r     s    r   r   N)"r   
__future__r   r   r   apitools.base.pyr   rz   googlecloudsdk.api_lib.computer   googlecloudsdk.callioper   "googlecloudsdk.command_lib.computer	   rr   3googlecloudsdk.command_lib.compute.backend_servicesr
   !googlecloudsdk.command_lib.exportr   r#   googlecloudsdk.corer   googlecloudsdk.core.consoler   r   ReleaseTracksr   GAUniverseCompatibleUpdateCommandr   r   r   r   r   r   r   <module>r      s    & &  ' > 7 ( 9 E V E A . 2		 D%%(()Y4t!! Y4  *Y4x D%%**D,=,=,C,CDh  Er   