
    A                         S r SSKJr  SSKJr  SSKJr  SSKrS\	S\
4S jrS\	S\
4S	 jrS
 rSS jr SS jrSS jrS rSS jrSS jrSS jrSS jrSS jrS rS rS rSS jr  SS jrSS jrSS jrg)z"Helper functions for DNS commands.    )util)apis)flagsNipreturnc                 R     [         R                  " U 5        g! [         a     gf = f)zReturns True if ip is an IPv4.TF)ipaddrIPv4Address
ValueErrorr   s    *lib/googlecloudsdk/command_lib/dns/util.pyIsIPv4r      *    
r	     
&&c                 R     [         R                  " U 5        g! [         a     gf = f)zReturns True if ip is an IPv6.TF)r	   IPv6Addressr   r   s    r   IsIPv6r   "   r   r   c                     SnU c  UbG  0 nX%S'   U b  UR                   R                  U 5      US'   Ub  XS'   U(       a  UR                   " S0 UD6nU$ )aY  Generate a keyspec from the given (unparsed) command line arguments.

Args:
  algorithm: (str) String mnemonic for the DNSSEC algorithm to be specified in
      the keyspec; must be a value from AlgorithmValueValuesEnum.
  key_length: (int) The key length value to include in the keyspec.
  key_type: (KeyTypeValueValuesEnum) Enum value for whether to create a
      keyspec for a KSK or a ZSK.
  messages: (module) Module (generally auto-generated by the API build rules)
      containing the API client's message classes.

Returns:
  A messages.DnsKeySpec instance created from the given arguments.
NkeyType	algorithm	keyLength )
DnsKeySpecAlgorithmValueValuesEnum)r   
key_lengthkey_typemessageskey_spec	spec_argss         r   ParseKeyr    +   sn      (j4I#i'22KK
 i)$$1y1h	/    c                 (   Sn/ nSnU R                   (       a0  [        R                  " SU5      R                  U R                   5      nSnU R                  (       a0  [        R                  " SU5      R                  U R                  5      nUS:X  a!  UR
                  R                  R                  nO UR
                  R                  R                  n[        XPR                  Xq5      nUb  UR                  U5        US:X  a!  UR
                  R                  R                  nO UR
                  R                  R                  n[        X`R                  Xq5      n	U	b  UR                  U	5        0 n
U(       a  XJS'   [        U SS5      b2  [        R                   " U5      R                  U R"                  5      U
S'   U R$                  b2  [        R&                  " X5      R                  U R$                  5      U
S'   U
(       a  UR(                  " S	0 U
D6nU$ )
a  Parse all relevant command line arguments and generate a DNSSEC config.

Args:
  args: (dict{str,(str|int)}) Dict of command line arguments; value type
    dependent on particular command line argument.
  messages: (module) Module (generally auto-generated by the API build rules)
    containing the API client's message classes.
  api_version: api_version that this function should use.

Returns:
  A messages.ManagedZoneDnsSecConfig instance populated from the given
  command line arguments.
Nkskzskv2defaultKeySpecsdenial_of_existencenonExistencestater   )ksk_algorithmr   GetKeyAlgorithmFlagMapperGetEnumForChoicezsk_algorithmr   KeyTypeValueValuesEnumKEY_SIGNING
keySigningr    ksk_key_lengthappendZONE_SIGNINGzoneSigningzsk_key_lengthgetattrGetDoeFlagMapperr'   dnssec_stateGetDnsSecStateFlagMapperManagedZoneDnsSecConfig)argsr   api_versiondnssec_config	key_specsr*   r-   key_enumksk_keyzsk_keydnssec_config_argss              r   ParseDnssecConfigArgsrC   L   s     -)-	33 t))*  -	33 t))* 
 D""99EEH""99DDH]$7$7L'WD""99FFH""99EEH]$7$7L'W,5()T($/;x(99$$	& ~& 
""'"@"@#t(() w 44J7IJM	r!   c           
         / nU R                   R                  S5      nU R                   R                  S5      nUb  U H  n[        U5      (       a"  UR                  U R                  USUS95        M5  [	        U5      (       a!  UR                  U R                  SXdS95        Mf  UR                  U R                  SSUUS95        M     Ub  U H  n[        U5      (       a"  UR                  U R                  USUS95        M5  [	        U5      (       a"  UR                  U R                  SUUS95        Mg  UR                  U R                  SSUUS95        M     U R                  US9$ )av  Parses list of forwarding nameservers into ManagedZoneForwardingConfig.

Args:
  messages: (module) Module (generally auto-generated by the API build rules)
    containing the API client's message classes.
  server_list: (list) List of IP addresses to use as forwarding targets for
    the DNS Managed Zone that uses default forwarding logic (based on RFC1918
    check).
  private_server_list: (list) List of IP addresses to use as forwarding
    targets for the DNS Managed Zone that always use the private VPC path.

Returns:
  A messages.ManagedZoneForwardingConfig instance populated from the given
  command line arguments.
r      Nipv4Addressipv6AddressforwardingPath)rG   rH   
domainNamerI   targetNameServers)+ManagedZoneForwardingConfigNameServerTargetForwardingPathValueValuesEnumr   r2   r   ManagedZoneForwardingConfig)r   server_listprivate_server_listtarget_serversdefault_enumprivate_enumnames          r   2ParseManagedZoneForwardingConfigWithForwardingPathrV      s   " .EEcc	,EEcc	,	@@ d< A 	

 $<<@@ d A 	
 	@@  +	 A 	
 , $#	@@ d+ A -	. $<<@@ d+ A -	.
 	@@  +	 A 	
 $* 
	-	-	-	OOr!   c                     [        U5      nU (       d  / $ U  Vs/ s H   nUR                  UR                  5       S9PM"     sn$ s  snf z.Build PolicyNetwork message from parsed_value.)
networkUrl)GetMessagesPolicyNetworkSelfLinkparsed_valueversionr   network_refs       r   PolicyNetworkProcessorra      sT     !(	I &
%+ (<(<(>?%
  
   'Ac                     [        U SS9$ )z3Build Beta PolicyNetwork message from parsed_value.v1beta2r_   )ra   )r^   s    r   BetaPolicyNetworkProcessorrf      s     
 i	@@r!   c                     [        U5      nU (       d  / $ U  Vs/ s H   nUR                  UR                  5       S9PM"     sn$ s  snf rX   )rZ   ResponsePolicyNetworkr\   r]   s       r   ResponsePolicyNetworkProcessorri      sT     !(	I &
%+ $$0D0D0F$G%
  
rb   c                     [        U5      n[        U 5      (       a*  UR                  U SUR                  R                  S5      S9$ UR                  SU UR                  R                  S5      S9$ )a  Build a single TargetNameServer based on 'value'.

Args:
  value: (str) A string representation of an IPV4 ip address representing the
    PrivateTargetNameServer.
  version: (str) A string indicating the version of the API to be used, should
    be 'v1' only before removing BetaTargetNameServerType.

Returns:
  A messages.PolicyAlternativeNameServerConfigTargetNameServer instance
  populated from the given ip address.
Nr   rF   rZ   r   1PolicyAlternativeNameServerConfigTargetNameServerrN   valuer_   r   s      r   TargetNameServerTypero           !(E]]EEQQoo
 F   EEQQoo
 F  r!   c                     [        U5      n[        U 5      (       a*  UR                  U SUR                  R                  S5      S9$ UR                  SU UR                  R                  S5      S9$ )a  Build a single TargetNameServer based on 'value'.

Args:
  value: (str) A string representation of an IPV4 ip address representing the
    PrivateTargetNameServer.
  version: (str) A string indicating the version of the API to be used, should
    be one of 'v1beta2' or 'v1alpha2'. This function will be removed after
    promoting v6 address to GA.

Returns:
  A messages.PolicyAlternativeNameServerConfigTargetNameServer instance
  populated from the given ip address.
Nr   rF   rk   rm   s      r   BetaTargetNameServerTyperr          !(E]]EE	:	:	&	&q	) F + + EE	:	:	&	&q	) F + +r!   c                     [        U5      n[        U 5      (       a*  UR                  U SUR                  R                  S5      S9$ UR                  SU UR                  R                  S5      S9$ )a  Build a single PrivateTargetNameServer based on 'value'.

Args:
  value: (str) A string representation of an IPV4 ip address representing the
    PrivateTargetNameServer.
  version: (str) A string indicating the version of the API to be used, should
    be 'v1' only before removing BetaPrivateTargetNameServerType.

Returns:
  A messages.PolicyAlternativeNameServerConfigTargetNameServer instance
  populated from the given ip address.
NrE   rF   rk   rm   s      r   PrivateTargetNameServerTyperu   3  rp   r!   c                     [        U5      n[        U 5      (       a*  UR                  U SUR                  R                  S5      S9$ UR                  SU UR                  R                  S5      S9$ )a  Build a single PrivateTargetNameServer based on 'value'.

Args:
  value: (str) A string representation of an IPV4 ip address representing the
    PrivateTargetNameServer.
  version: (str) A string indicating the version of the API to be used, should
    be one of 'v1beta2' or 'v1alpha2'. This function will be removed after
    promoting v6 address to GA.

Returns:
  A messages.PolicyAlternativeNameServerConfigTargetNameServer instance
  populated from the given ip address.
NrE   rF   rk   rm   s      r   BetaPrivateTargetNameServerTyperw   S  rs   r!   c                 0    [        XU5      n[        X25      $ )z6Build a list of PolicyNetworks from command line args.)ParseNetworksra   rn   projectr_   networkss       r   ParsePolicyNetworksr}   r  s    573(		22r!   c           	          U (       d  / $ [         R                  " U5      nU  Vs/ s H  nUR                  USSU0S9PM     nnU$ s  snf )zPBuild a list of PolicyNetworks or ResponsePolicyNetworks from command line args.zcompute.networksr{   )
collectionparams)api_utilGetRegistryParse)rn   r{   r_   registrynetwork_namer|   s         r   ry   ry   x  sk    	I!!'*(
 <A	 <A< nn
'W%  ' <A	   
/s   Ac                 0    [        XU5      n[        X25      $ )z>Build a list of ResponsePolicyNetworks from command line args.)ry   ri   rz   s       r   ParseResponsePolicyNetworksr     s    573(	'	::r!   c                    U(       d  U(       d  g[        U 5      n/ nU(       a  XA Vs/ s H  n[        XP5      PM     sn-  nU(       a  UU Vs/ s H  n[        XP5      PM     sn-  nUR                  US9$ s  snf s  snf )a  Parses list of alternative nameservers into AlternativeNameServerConfig.

Args:
  version: (str) A string indicating the version of the API to be used, should
    be 'v1' only before removing BetaParseAltNameServers.
  server_list: (Sequence) List of IP addresses to use as forwarding targets
    for the DNS managed zone that uses default forwarding logic.
  private_server_list: (Sequence) List of IP addresses to use as forwarding
    targets for the DNS Managed Zone that always uses the private VPC path.

Returns:
  A messages.PolicyAlternativeNameServerConfig instance populated from the
  given command line arguments.Only the not none server list will be parsed
  and
  an empty list will be returned if both are none.
NrK   )rZ   ro   ru   !PolicyAlternativeNameServerConfigr_   rP   rQ   r   result_listr   s         r   ParseAltNameServersr     s    " 
0!(+L"(5LLK;N;NR#B0;N K 
	3	3# 
4 
% % M   A7A<c                    U(       d  U(       d  g[        U 5      n/ nU(       a  XA Vs/ s H  n[        XP5      PM     sn-  nU(       a  UU Vs/ s H  n[        XP5      PM     sn-  nUR                  US9$ s  snf s  snf )a  Parses list of alternative nameservers into AlternativeNameServerConfig.

Args:
  version: (str) A string indicating the version of the API to be used, should
    be one of 'v1beta2' or 'v1alpha2'. This function will be moved after
    promoting v6 address to GA.
  server_list: (Sequence) List of IP addresses to use as forwarding targets
    for the DNS Managed Zone that uses default forwarding logic.
  private_server_list: (Sequence) List of IP addresses to use as forwarding
    targets for the DNS Managed Zone that always uses the private VPC path.

Returns:
  A messages.PolicyAlternativeNameServerConfig instance populated from the
  given command line arguments.Only the not none server list will be parsed
  and
  an empty list will be returned if both are none.
NrK   )rZ   rr   rw   r   r   s         r   BetaParseAltNameServersr     s    ( 
0!(+KPKb,R9KPPK%%B 	(4% K 
	3	3# 
4 
% % Qr   c                     [        U5      nU R                  S:X  aF  US:X  a   UR                  R                  R                  $ UR                  R                  R
                  $ g)z%Parses response policy rule behavior.bypassResponsePolicyr%   N)rZ   behaviorResponsePolicyRuleBehaviorValueValuesEnumBYPASS_RESPONSE_POLICYr   )r;   r_   ms      r    ParseResponsePolicyRulesBehaviorr     sj    '!	]],,RY]aRa177NN  ighg{g{  hT  hT  hi  hi  ir!   c                 0    [         R                  " SU 5      $ )Ndns)r   GetMessagesModulere   s    r   rZ   rZ     s    			w	//r!   )v1)NN)rd   )__doc__googlecloudsdk.api_lib.dnsr   r   googlecloudsdk.api_lib.utilr   googlecloudsdk.command_lib.dnsr   r	   strboolr   r   r    rC   rV   ra   rf   ri   ro   rr   ru   rw   r}   ry   r   r   r   r   rZ   r   r!   r   <module>r      s    ) 8 , 0 s t s t B@H 59CPL
A
@+>@+>3;%@ )-04 %F0r!   