
    e'                        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ZddZ e
j,                  e
j.                  j0                  e
j.                  j2                  e
j.                  j4                        e
j6                   G d de
j8                                      Zy)z'gcloud dns managed-zone create command.    )absolute_import)division)unicode_literals)util)apis)base)
exceptions)flags)labels_util)log)
propertiesc                    t        j                  d      j                  |        t        j                         j                  |        t        j                         j                  |        t        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                  |        t        j"                         j                  |        y)z+Adds the common arguments for all versions.z+The name of the managed-zone to be created.N)r
   GetDnsZoneArgAddToParserGetManagedZonesDnsNameArgGetManagedZonesDescriptionArgAddCommonManagedZonesDnssecArgsr   AddCreateLabelsFlagsGetManagedZoneNetworksArgGetManagedZoneVisibilityArgGetForwardingTargetsArgGetDnsPeeringArgsGetPrivateForwardingTargetsArgGetReverseLookupArgGetServiceDirectoryArgGetManagedZoneLoggingArgGetManagedZoneGkeClustersArgGetLocationArg)parsermessagesapi_versions      'lib/surface/dns/managed_zones/create.py_AddArgsCommonr#       sQ   3K!!#//7%%'33F;''+F""6*!!#//7##%11&9!--f5''/&&(44V<))&1 ,,V4  "..v6$$&226:$$V,    c                     d}| j                   t        j                  | ||      }|S g d}|D ]%  }t        | |d      t	        j
                  |d       |S )z6Parse user-specified args into a DnssecConfig message.N)denial_of_existenceksk_algorithmzsk_algorithmksk_key_lengthzsk_key_lengthzoDNSSEC must be enabled in order to use other DNSSEC arguments. Please set --dnssec-state to "on" or "transfer".)dnssec_statecommand_utilParseDnssecConfigArgsgetattrr	   InvalidArgumentException)argsr    r!   dnssec_configbad_argsbad_args         r"   _MakeDnssecConfigr4   5   sw    -	" 66hM$ 
H 	w	%	111?
 	
  
r$   c                   6    e Zd ZdZed        Zed        Zd Zy)Createaw  Create a Cloud DNS managed-zone.

  This command creates a Cloud DNS managed-zone.

  ## EXAMPLES

  To create a managed-zone, run:

    $ {command} my-zone --dns-name=my.zone.com. --description="My zone!"

  To create a managed-zone with DNSSEC, run:

    $ {command} my-zone-2 --description="Signed Zone"
        --dns-name=myzone.example
        --dnssec-state=on

    To create a zonal managed-zone scoped to a GKE Cluster in us-east1-a, run:

    $ {command} my-zonal-zone --description="Signed Zone"
        --dns-name=cluster.local
        --visibility=private
        --gkeclusters=cluster1
        --location=us-east1-a
  c                     | j                         t        j                   j                  t        j                   j                  fv S )N)ReleaseTrackr   BETAALPHA)clss    r"   _BetaOrAlphazCreate._BetaOrAlphal   s;    "  r$   c                     t        j                  | j                               }t        j                  d|      }t        |||       |j                  j                  t        j                         y )Ndns)r!   )
r   GetApiFromTrackr8   r   GetMessagesModuler#   display_infoAddCacheUpdaterr
   ManagedZoneCompleter)r;   r   r!   r    s       r"   ArgszCreate.Argss   sS    &&s'7'7'9:K%%e[9H68=
''(B(BCr$   c                 	   |j                   dk(  rN|j                  d      rt        j                  dd      |j                  d      rt        j                  dd      |j                   dk(  r.|j                  "|j
                  t        j                  d	d
      t        j                  | j                         |      }t        j                  |      }t        j                  d|      }t        j                  |      j                  |j                  t        j                   ||      d      |j                   }d }|dk(  r;|j"                  j$                  j&                  }|j                   j)                         }n |j"                  j$                  j*                  }|j"                  j%                  |      }d }||k(  r|j                  r|j                  dgk7  r|j                  ng }	fd}
|	D cg c]
  } |
|       }}|D cg c]  }|j-                  |       }}|j
                  xs g }|D cg c]  }|j/                  |       }}|j1                  ||      }d }|j2                  s|j4                  r,t7        j8                  ||j2                  |j4                        }t;        |||      }t=        j>                  ||j"                  j@                        }d }|jB                  r|jD                  rdtF        jH                  jJ                  jL                  jO                          djQ                  |jB                  |jD                        }|jS                         }|jU                  |      |_+        d }|j                  d      r|jX                  r|j[                         }d }|j                  d      r8|j\                  r,|j_                  |ja                  |j\                              }d }|j                  d      r!|jc                         }|jd                  |_3        |j#                  jh                  t        jj                  |jl                        |jn                  |||||||||      }|jq                  |jr                        }|dk(  r|jt                  |_:        |jv                  jy                  |      }t{        j|                         |gS c c}w c c}w c c}w )Npublicnetworksz
--networkszLIf --visibility is set to public (default), setting networks is not allowed.gkeclustersz--gkeclusterszOIf --visibility is set to public (default), setting gkeclusters is not allowed.privatez--networks, --gkeclusterszIf --visibility is set to private, a list of networks or list of
           GKE clusters must be provided.'
         NOTE: You can provide an empty value ("") for private zones that
          have NO network or GKE clusters binding.
          r>   zdns.managedZones)
collectionv2 c                 `    j                  | ddj                  i      j                         S )Nzcompute.networksproject)rJ   params)ParserN   SelfLink)networkregistryzone_refs    r"   GetNetworkSelfLinkz&Create.Run.<locals>.GetNetworkSelfLink   s6    ~~)x//0  
 (*		r$   )
networkUrl)gkeClusterName)rG   gkeClusters)r    server_listprivate_server_listzhttps://www.z*/compute/v1/projects/{}/global/networks/{}managed_reverse_lookupservice_directory_namespace)namespaceUrl)	namespacelog_dns_queries)namednsNamedescriptiondnssecConfiglabels
visibilityforwardingConfigprivateVisibilityConfigpeeringConfigreverseLookupConfigserviceDirectoryConfigcloudLoggingConfig)managedZonerN   )?re   IsSpecifiedr	   r/   rG   rH   RequiredArgumentExceptionr   GetApiFromTrackAndArgsr8   GetApiClientr   r@   GetRegistryrP   dns_zoneGetParamsForRegistryManagedZoneVisibilityValueValuesEnumPRIVATEupperrI   )ManagedZonePrivateVisibilityConfigNetwork,ManagedZonePrivateVisibilityConfigGKECluster"ManagedZonePrivateVisibilityConfigforwarding_targetsprivate_forwarding_targetsr,   2ParseManagedZoneForwardingConfigWithForwardingPathr4   r   ParseCreateArgsLabelsValuetarget_projecttarget_networkr   VALUEScoreuniverse_domainGetformatManagedZonePeeringConfig%ManagedZonePeeringConfigTargetNetworktargetNetworkr[   ManagedZoneReverseLookupConfigr\   !ManagedZoneServiceDirectoryConfig*ManagedZoneServiceDirectoryConfigNamespaceManagedZoneCloudLoggingConfigr_   enableLoggingrl   AppendTrailingDotdns_namerb   DnsManagedZonesCreateRequestrN   locationmanagedZonesr6   r   CreatedResource)selfr0   r!   r>   r    visibility_flagprivate_enumre   visibility_configrG   rU   nnetwork_urlsnurlnetwork_configsrH   r`   gkecluster_configsforwarding_configr1   rd   peering_configpeering_networkreverse_lookup_configservice_directory_configcloud_logging_configzonerequestresultrS   rT   s                                @@r"   Runz
Create.Runz   s    ("			*	%11
 	
 M*11
 	
 	9$MM!$00
%  --d.?.?.A4HK


K
(C%%e[9H,H~~!!+t4%  H ooOLd))CCKKl--/o))CCKKl%%??PJ\!  ==T]]rd-B$--  6>>X(+Xl> #"d 
<
<
<
M"   $$*k "	 "d 
?
?! @  "	   #EE"0B F  $"A"A

I
I11"&"A"A  &dHkBM((x/C/C/O/OPFNt22**//??CCEF G# ##)6!!4#6#6$   88:n

8
8( 9  " !12''&EEG#67,,!)!K!KGG;; H  "L "  )*%CCE+/+?+?(!!&&t}}5$$"* 1$17/   D 33("2"2 4 G dg$$W-F!8O ?s   7S#S(;S-N)__name__
__module____qualname____doc__classmethodr<   rD   r    r$   r"   r6   r6   N   s7    
2   D Dar$   r6   N)v1)r   
__future__r   r   r   googlecloudsdk.api_lib.dnsr   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper   r	   googlecloudsdk.command_lib.dnsr
   r,   $googlecloudsdk.command_lib.util.argsr   googlecloudsdk.corer   r   r#   r4   ReleaseTracksr8   r:   r9   GAUniverseCompatibleCreateCommandr6   r   r$   r"   <module>r      s    . &  ' + , ( . 0 ? < # *-*2 T..33T5F5F5I5I IT I Ir$   