
    y%                        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Z	 	 	 	 	 	 	 ddZ ej*                  ej,                  j.                  ej,                  j0                  ej,                  j2                        ej4                   G d dej6                                      Zy)z'gcloud dns managed-zone update command.    )absolute_import)division)unicode_literals)managed_zones)util)apis)base)flags)labels_util)
propertiesc                 X   t        j                  d      j                  |        t        j                  | ||       t        j                         j                  |        t        j                  |        t        j                         j                  |        t        j                  j                  |        t        j                         j                  |        t        j                         j                  |        t        j                         j                  |        t        j                         j                  |        t        j                         j                  |        t        j                         j                  |        t        j                          j                  |        y)z2Helper function to retrieve necessary flag values.z+The name of the managed-zone to be updated.N)r
   GetZoneResourceArgAddToParserAddCommonManagedZonesDnssecArgsGetManagedZonesDescriptionArgr   AddUpdateLabelsFlagsGetManagedZoneNetworksArgr	   
ASYNC_FLAGGetForwardingTargetsArgGetDnsPeeringArgsGetPrivateForwardingTargetsArgGetReverseLookupArgGetManagedZoneLoggingArgGetManagedZoneGkeClustersArgGetLocationArg)parsermessagesapi_versions      'lib/surface/dns/managed_zones/update.py_CommonArgsr       s   3K''+F%%'33F;""6*!!#//7//f%!--f5''/&&(44V<))&1  "..v6$$&226:$$V,    Nc	           
          t        j                  |      }	|	j                  |j                  t        j                  ||      d      t        j                  | j                  |      }
t        j                  | j                  j                  j                   fd      }g }|j                         r/|j                   j                  |j                                      i }|r||d<   |r||d<   |r||d<   |r||d<   |r||d<   |
s|j                  s|r<|j                    j                   |j"                  f|
|j                  d	|d
|       |S )a  Helper function to perform the update.

  Args:
    zones_client: the managed zones API client.
    args: the args provided by the user on the command line.
    private_visibility_config: zone visibility config.
    forwarding_config: zone forwarding config.
    peering_config: zone peering config.
    reverse_lookup_config: zone reverse lookup config.
    cloud_logging_config: Stackdriver logging config.
    api_version: the API version of this request.
    cleared_fields: the fields that should be included in the request JSON as
      their default value (fields that are their default value will be omitted
      otherwise).

  Returns:
    The update labels and PATCH call response.
  zdns.managedZones)
collectionc                  :    j                         j                  S N)Getlabels)zone_refzones_clients   r   <lambda>z_Update.<locals>.<lambda>]   s    lx(//r!   private_visibility_configforwarding_configpeering_configreverse_lookup_configcloud_logging_configN)dnssec_configdescriptionr'   cleared_fields)r   GetRegistryParsezoneGetParamsForRegistrycommand_utilParseDnssecConfigArgsr   r   ProcessUpdateArgsLazyManagedZoneLabelsValue	GetOrNoneappendUpdateLabelsr1   Patchasync_)r)   argsr+   r,   r-   r.   r/   r   r2   registryr0   labels_updateupdate_resultskwargsr(   s   `             @r   _UpdaterF   2   su   : k*(^^
ii
T2#  ( 44
L!!;- 33
''33/- .!!(M,C,C,EF &*CF&'"3F-F&;F"#%9F!"d&&&KK	
 ((()	
 	

 
r!   c                   6    e Zd ZdZed        Zed        Zd Zy)UpdateGAal  Update an existing Cloud DNS managed-zone.

  Update an existing Cloud DNS managed-zone.

  ## EXAMPLES

  To change the description of a managed-zone, run:

    $ {command} my-zone --description="Hello, world!"

  To change the description of a zonal managed-zone in us-east1-a, run:

    $ {command} my-zone --description="Hello, world!" --location=us-east1-a
  c                     | j                         t        j                   j                  t        j                   j                  fv S r%   )ReleaseTrackr	   BETAALPHA)clss    r   _BetaOrAlphazUpdateGA._BetaOrAlpha   s;    "  r!   c                     t        j                  | j                               }t        j                  d|      }t        |||       y )Ndns)r   )r   GetApiFromTrackrJ   r   GetMessagesModuler    )rM   r   r   r   s       r   ArgszUpdateGA.Args   s9    &&s'7'7'9:K%%e[9Hk:r!   c                    t        j                  | j                         |      dk(  r|j                  nd }t        j
                  j                  |      }|j                  }d }|j                  d      s|j                  d      r,t        j                  ||j                  |j                        }d }|j                  r|j                  rdt        j                   j"                  j$                  j'                          dj)                  |j                  |j                        }|j+                         }|j-                  |      |_        d }g }	|j0                  |j2                  |j0                  g k(  r|	j5                  d       |j0                  r|j0                  ng }
fd	}|
D cg c]
  } ||       }}|D cg c]  }|j7                  |       }}|j2                  g k(  r|	j5                  d
       |j2                  r|j2                  ng }|D cg c]  }|j9                  |       }}|j;                  ||      }d }|j                  d      r|j<                  r|j?                         }d }|j                  d      r!|jA                         }|jB                  |_"        tG        ||||||||		      S c c}w c c}w c c}w )Nv2forwarding_targetsprivate_forwarding_targets)r   server_listprivate_server_listzhttps://www.z*/compute/v1/projects/{}/global/networks/{})
networkUrlz privateVisibilityConfig.networksc                     t        j                        j                  | ddt        j                  j
                  j                  j                  i      j                         S )Nzcompute.networksproject)r#   params)	r   r3   r4   r   VALUEScorer\   	GetOrFailSelfLink)networkr   s    r   GetNetworkSelfLinkz(UpdateGA.Run.<locals>.GetNetworkSelfLink   sT    [)U-!:#4#4#9#9#A#A#K#KL  
 XZ	
r!   z#privateVisibilityConfig.gkeClusters)gkeClusterName)networksgkeClustersmanaged_reverse_lookuplog_dns_queries)r+   r,   r-   r.   r/   r   r2   )$r   GetApiFromTrackAndArgsrJ   locationr   ClientFromApiVersionr   IsSpecifiedr7   2ParseManagedZoneForwardingConfigWithForwardingPathrV   rW   target_projecttarget_networkr   r^   r_   universe_domainr&   formatManagedZonePeeringConfig%ManagedZonePeeringConfigTargetNetworktargetNetworkre   gkeclustersr=   )ManagedZonePrivateVisibilityConfigNetwork,ManagedZonePrivateVisibilityConfigGKECluster"ManagedZonePrivateVisibilityConfigrg   ManagedZoneReverseLookupConfigManagedZoneCloudLoggingConfigrh   enableLoggingrF   )selfrA   rj   r)   r   r,   r-   peering_networkvisibility_configr2   re   rc   nnetwork_urlsnurlnetwork_configsrv   namegkecluster_configsr.   r/   r   s                        @r   RunzUpdateGA.Run   s    --d.?.?.A4HK +t 3t}}H ''66{HML$$H,-1A1A$2 
I
I11"&"A"A  Nt22**//??CCEF G, ,,2F!!4#6#6-   88:n

8
8( 9  "  N}} D$4$4$@ 
"	@A"&--Rh	
 6>>X(+Xl> #"d 
<
<
<
M"   
		R	CD(,(8(8D$$bk "	 "d 
?
?! @  "	   #EE"0B F  !12''&EEG)*%CCE+/+?+?("3+%31%
 
E ?s   /KKKN)__name__
__module____qualname____doc__classmethodrN   rS   r    r!   r   rH   rH      s5    
   ; ;
mr!   rH   )v1)NNNNNr   N)r   
__future__r   r   r   googlecloudsdk.api_lib.dnsr   r   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper	   googlecloudsdk.command_lib.dnsr
   r7   $googlecloudsdk.command_lib.util.argsr   googlecloudsdk.corer   r    rF   ReleaseTracksrJ   rL   rK   GAUniverseCompatibleUpdateCommandrH   r   r!   r   <module>r      s    . &  ' 4 + , ( 0 ? < *-, #Nb T..33T5F5F5I5I Jt!! J Jr!   