
    $                        d Z ddlmZ ddlmZ ddlmZ ddl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iZd Zd Zd Ze
j0                   e
j2                  e
j4                  j6                         G d de
j8                                      Z e
j2                  e
j4                  j<                         G d de             Z e
j2                  e
j4                  j@                         G d de             Z!y)z&Create network endpoint group command.    )absolute_import)division)unicode_literalsN)base_classes)network_endpoint_groups)base)
exceptions)flags)scope)logEXAMPLESz|
To create a network endpoint group:

  $ {command} my-neg --zone=us-central1-a --network=my-network --subnet=my-subnetwork
c                 N    d}| |v rdj                  | t        ||                }|S )N z- Type {0} must be specified in the {1} scope.)format_JoinWithOr)network_endpoint_typevalid_scopesvalid_scopes_error_messages      5lib/surface/compute/network_endpoint_groups/create.py_GetValidScopesErrorMessager   )   s:    !l*7f{<8M+NO 
 
$#    c                     t        j                         }| j                         D ]5  \  }}|D ]+  }|j                  |t	                     j                  |       - 7 |S )N)collectionsOrderedDictitems
setdefaultlistappend)dicnew_dickeyvaluesvalues        r   _Invertr$   4   sR    ##%'YY[kc6'..s3  ! 
.r   c                     | syt        |       dk(  r| d   S t        |       dk(  r| d   dz   | d   z   S dj                  | dd       d	z   | d   z   S )
zHJoins strings, for example, into a string like 'A or B' or 'A, B, or C'.r      r      z or z, Nz, or )lenjoin)stringss    r   r   r   <   se    	
7|q1:
7|q1:++99WSb\"W,wr{::r   c                   8    e Zd ZdZeZdZdZed        Z	d Z
d Zy)Createz/Create a Compute Engine network endpoint group.Fc                     t        j                         j                  |       t        j                  || j                  | j
                         y N)support_neg_typesupport_serverless_deploymentr
   MakeNetworkEndpointGroupsArgAddArgumentAddCreateNegArgsToParserr0   r1   clsparsers     r   ArgszCreate.ArgsQ   <    	&&(44V<	""--&)&G&Gr   c                     t        j                  | j                               }|j                  }|j                  j                  }|j
                  }t        j                  |||      }t        j                         j                  ||j
                  t        j                  j                  t        j                  |j                              }| j!                  ||       |j"                  rV|j%                  ||j&                  |j(                  |j"                  |j*                  |j,                  |j.                        }n| j0                  r|j%                  ||j&                  |j(                  |j"                  |j*                  |j,                  |j2                  |j4                  |j6                  |j8                  |j:                  |j<                  |j>                  |j@                  |jB                  |jD                  |jF                  |jH                  |jJ                  |j.                        }n|j%                  ||j&                  |j(                  |j"                  |j*                  |j,                  |j2                  |j4                  |j6                  |j8                  |j:                  |j<                  |j>                  |j@                  |jB                  |j.                        }tM        jN                  |jQ                         d       |S )zCIssues the request necessary for adding the network endpoint group.)default_scopescope_lister)default_portproducer_portnetworksubnetpsc_target_service)r>   r?   r@   rA   cloud_run_servicecloud_run_tagcloud_run_url_maskapp_engine_appapp_engine_serviceapp_engine_versionapp_engine_url_maskcloud_function_namecloud_function_url_maskserverless_deployment_platformserverless_deployment_resourceserverless_deployment_versionserverless_deployment_url_maskrB   )r>   r?   r@   rA   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rB   znetwork endpoint group))r   ComputeApiHolderReleaseTrackclientmessages	resourcesr   NetworkEndpointGroupsClientr
   r3   ResolveAsResourcecompute_scope	ScopeEnumZONEcompute_flagsGetDefaultScopeLister_ValidateNEGr?   r-   r   r>   r@   rA   rB   r1   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   r   CreatedResourceName)	selfargsholderrR   rS   rT   
neg_clientneg_refresults	            r   Runz
Create.RunZ   s   **4+<+<+>?F]]F}}%%H  I(DD)J 002DD#--22"88G	 E G 	dG$  


$
$((**,,!44 ! f 
	+	+  


$
$((**,, 22**!44,,!44!44"66"66"&">">)-)L)L)-)L)L(,(J(J)-)L)L!44) ! f.   


$
$((**,, 22**!44,,!44!44"66"66"&">">!44! ! f& (@AMr   c           
         t        |d      }t        |d      }|j                  }t        j                         }dg|d<   dg|d<   ddg|d<   ddg|d	<   dg|d
<   dg|d<   dg|d<   dg|d<   t	        |      }|rC|d   }||vr9t        j                  ddj                  t        |      t        ||                  y|rk|d   }	||	vr9t        j                  ddj                  t        |	      t        ||                  |dk(  r#|j                  st        j                  dd      yy|d   }
||
vr9t        j                  ddj                  t        |
      t        ||                  y)z)Validate NEG input before making request.zoneregionzonalzgce-vm-ip-portregionalzgce-vm-ip-portmapglobalzinternet-ip-portzinternet-fqdn-port
serverlesszprivate-service-connectznon-gcp-private-ip-portz	gce-vm-ipz--network-endpoint-typez9Zonal NEGs only support network endpoints of type {0}.{1}z<Regional NEGs only support network endpoints of type {0}.{1}z--private-service-connectzhNetwork endpoint type private-service-connect must specify --psc-target-service for private service NEG.z:Global NEGs only support network endpoints of type {0}.{1}N)hasattrr   r   r   r$   r	   InvalidArgumentExceptionr   r   r   rB   )r_   r`   rc   is_zonalis_regionalr   r   valid_scopes_invertedvalid_zonal_typesvalid_regional_typesvalid_global_typess              r   r\   zCreate._ValidateNEG   s   w'H'8,K 66**,L&-YL!")3L$%(0*'=L#$*2J)?L%&",L/9lL*+/6iL*+!(	L#L1/8	&7	711%GNN-.+)<
 	
 
8 
2:>	&:	:11%JV01+)<	
 		
  #<
<))11'@
 	
 * = 1:	&8	811%HOO./+)<
 	
 
9r   N)__name__
__module____qualname____doc__DETAILED_HELPdetailed_helpr0   r1   classmethodr9   re   r\    r   r   r-   r-   H   s7     8-"' HTH
r   r-   c                   $    e Zd ZdZdZed        Zy)
CreateBeta6Create a Google Compute Engine network endpoint group.Tc                     t        j                         j                  |       t        j                  || j                  | j
                         y r/   r2   r6   s     r   r9   zCreateBeta.Args   r:   r   N)ru   rv   rw   rx   r1   r{   r9   r|   r   r   r~   r~      s    >"& r   r~   c                   $    e Zd ZdZdZed        Zy)CreateAlphar   Tc                     t        j                         j                  |       t        j                  || j                  | j
                         y r/   r2   r6   s     r   r9   zCreateAlpha.Args  r:   r   N)ru   rv   rw   rx   r0   r{   r9   r|   r   r   r   r      s    > r   r   )"rx   
__future__r   r   r   r   googlecloudsdk.api_lib.computer   r   googlecloudsdk.callioper   r	   "googlecloudsdk.command_lib.computer
   rZ   r   rW   :googlecloudsdk.command_lib.compute.network_endpoint_groupsgooglecloudsdk.corer   ry   r   r$   r   UniverseCompatibleReleaseTracksrQ   GACreateCommandr-   BETAr~   ALPHAr   r|   r   r   <module>r      s   - &  '  7 B ( . E E L #  $	; D%%(()b
T b
 * b
J D%%**+  , D%%++,*  -r   