
    G                     r    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  G d	 d
e      Zy)z"Network endpoint group api client.    )absolute_import)division)unicode_literals)utils)poller)waiter)	arg_utilsc                       e Zd ZdZd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd ZddZd Zd Zy)NetworkEndpointGroupsClientz:Client for network endpoint groups service in the GCE API.c                    || _         || _        || _        | j                   j                  j                  | _        t        | j                   j                  d      r%| j                   j                  j                  | _        t        | j                   j                  d      r&| j                   j                  j                  | _
        y y )NglobalNetworkEndpointGroupsregionNetworkEndpointGroups)clientmessages	resourcesapitools_clientnetworkEndpointGroups_zonal_servicehasattrr   _global_servicer   _region_service)selfr   r   r   s       =lib/googlecloudsdk/api_lib/compute/network_endpoint_groups.py__init__z$NetworkEndpointGroupsClient.__init__   s     DKDMDN++55KKDt{{**,IJ
++
%
%
A
A  t{{**,IJ
++
%
%
A
A  K    Nc                 X	   t        |d      }t        |d      }d}| j                  |      }|xr | j                  |      }|rB|s|s|s|r:| j                  j	                  |d|j
                  id      }|j                         }d}|ro|s|s|ri|r|j                  }nt        j                  |j                        }| j                  j	                  ||j
                  |dd      }|j                         }d}|s|s|	r| j                  j                  |||		      }d}|
s|s|s|r| j                  j                  |||
      }d} |s|r| j                  j                  ||      } d}!|s|s|s|r| j                  j                  ||||      }!| j                  j                   j"                  }"|r|!rH| j                  j!                  |j%                         t'        j(                  ||"      |||||| |!	      }#n|rt'        j(                  ||"      |"j*                  k(  r|rb| j                  j-                  |      }$| j                  j!                  |j%                         t'        j(                  ||"      ||$|||      }#n| j                  j!                  |j%                         t'        j(                  ||"      ||||      }#n|rC| j                  j!                  |j%                         t'        j(                  ||"      |||      }#n| j                  j!                  |j%                         t'        j(                  ||"      ||||||       }#nB| j                  j!                  |j%                         t'        j(                  ||"      |||      }#|r^| j                  j/                  |#|j
                  |j                        }%| j0                  j3                  | j4                  d|%fg      d   S |r^| j                  j7                  |#|j
                  |j                        }%| j0                  j3                  | j8                  d|%fg      d   S | j                  j;                  |#|j
                        }%| j0                  j3                  | j<                  d|%fg      d   S )z!Creates a network endpoint group.zoneregionNprojectzcompute.networks
collection)r   r   zcompute.subnetworks)servicetagurlMask)r"   versionr$   )functionr$   )platformresourcer%   r$   )	namenetworkEndpointTypedefaultPortnetwork
subnetworkcloudRun	appEnginecloudFunctionserverlessDeployment)producerPort)r)   r*   r+   pscDatar,   r-   pscTargetService)r)   r*   r+   r,   r-   r4   )r)   r*   r+   r,   r-   )r)   r*   r+   r,   r-   r.   r/   r0   )networkEndpointGroupr   r   Insertr   )r5   r   r   )r5   r   )r   _IsInternetNeg_IsPortMappingNegr   Parser   SelfLinkr   	api_utilsZoneNameToRegionNamer   r   NetworkEndpointGroupCloudRunNetworkEndpointGroupAppEngine!NetworkEndpointGroupCloudFunction(NetworkEndpointGroupServerlessDeploymentNetworkEndpointGroup"NetworkEndpointTypeValueValuesEnumNamer	   ChoiceToEnumPRIVATE_SERVICE_CONNECTNetworkEndpointGroupPscData)ComputeNetworkEndpointGroupsInsertRequestr   MakeRequestsr   /ComputeRegionNetworkEndpointGroupsInsertRequestr   /ComputeGlobalNetworkEndpointGroupsInsertRequestr   )&r   neg_refnetwork_endpoint_typedefault_portproducer_portr,   subnet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_maskpsc_target_serviceis_zonalis_regionalnetwork_uriis_internet_negis_port_mapping_negnetwork_ref
subnet_urir   
subnet_ref	cloud_run
app_enginecloud_functionserverless_deploymentendpoint_type_enumnetwork_endpoint_grouppsc_datarequests&                                         r   Createz"NetworkEndpointGroupsClient.Create.   s   0 w'H'8,KK ))*?@O% $*@*@+ &/=PNN((
Iw/<N ) k  ((*kJ815H	//=>>''
oo
8* ( j
 &&(jIM-?--<<#$ = i
 J==>>$$% ? j
 N5}}FF&0G G n !&)() --
@
@5534	 A   	**MM   
!%!C!C ) 6 6%'9! %! (!6 "D "
 $$%:<NO778 ]]>>( ? ( $(==#E#E<<>"+"8"8');# '!#1 $F 
$
  $(==#E#E<<>"+"8"8');# '!#1 $F 	$
  !%!C!C ) 6 6%'9! %! "D "
 "&!C!C ) 6 6%'9! %! ( "D "
  $}}AA||~'44#%7 #  B   GG5//|| H g
 [[%%73
4	  
MM5// N g
 [[%%  (G4
5	  MM5w N g [[%%  (G4
5	 r   c           
         | j                   j                  }| j                   j                  } ||j                         |j                  |j
                   || j                  |                  }| j                  j                  |      S )z=Attaches network endpoints to a zonal network endpoint group.networkEndpoints)r5   r   r   +networkEndpointGroupsAttachEndpointsRequest)	r   9ComputeNetworkEndpointGroupsAttachNetworkEndpointsRequest+NetworkEndpointGroupsAttachEndpointsRequestrC   r   r   _GetEndpointMessageListr   AttachNetworkEndpointsr   rK   	endpointsrequest_classnested_request_classrm   s         r   _AttachZonalEndpointsz1NetworkEndpointGroupsClient._AttachZonalEndpoints   |     	OO  	AA  $\\^\\4H!99)D5
	G 55g>>r   c                 <    |D ]  }d|v st        |      dk(  s y y)z;Checks if endpoint list has an endpoint with instance only.instance   TF)len)r   rx   arg_endpoints      r   _HasAnyInstanceOnlyEndpointz7NetworkEndpointGroupsClient._HasAnyInstanceOnlyEndpoint  s(    !	|	#L(9Q(> " r   c           
         | j                   j                  }| j                   j                  } ||j                         |j                  |j
                   || j                  |                  }| j                  j                  |      S )z?Detaches network endpoints from a zonal network endpoint group.rp   )r5   r   r   +networkEndpointGroupsDetachEndpointsRequest)	r   9ComputeNetworkEndpointGroupsDetachNetworkEndpointsRequest+NetworkEndpointGroupsDetachEndpointsRequestrC   r   r   ru   r   DetachNetworkEndpointsrw   s         r   _DetachZonalEndpointsz1NetworkEndpointGroupsClient._DetachZonalEndpoints  r|   r   c           
         | j                   j                  }| j                   j                  } ||j                         |j                  |j
                   || j                  |                  }| j                  j                  |      S )z@Attaches network endpoints to a regional network endpoint group.rp   )r5   r   r   1regionNetworkEndpointGroupsAttachEndpointsRequest)	r   ?ComputeRegionNetworkEndpointGroupsAttachNetworkEndpointsRequest1RegionNetworkEndpointGroupsAttachEndpointsRequestrC   r   r   ru   r   rv   rw   s         r   _AttachRegionalEndpointsz4NetworkEndpointGroupsClient._AttachRegionalEndpoints(  |     	UU  	GG  $\\^~~:N!99)D;
	G 66w??r   c           
         | j                   j                  }| j                   j                  } ||j                         |j                  |j
                   || j                  |                  }| j                  j                  |      S )zBDetaches network endpoints from a regional network endpoint group.rp   )r5   r   r   1regionNetworkEndpointGroupsDetachEndpointsRequest)	r   ?ComputeRegionNetworkEndpointGroupsDetachNetworkEndpointsRequest1RegionNetworkEndpointGroupsDetachEndpointsRequestrC   r   r   ru   r   r   rw   s         r   _DetachRegionalEndpointsz4NetworkEndpointGroupsClient._DetachRegionalEndpoints:  r   r   c           	         | j                   j                  }| j                   j                  } ||j                         |j                   || j                  |                  }| j                  j                  |      S )z>Attaches network endpoints to a global network endpoint group.rp   )r5   r   1globalNetworkEndpointGroupsAttachEndpointsRequest)r   ?ComputeGlobalNetworkEndpointGroupsAttachNetworkEndpointsRequest1GlobalNetworkEndpointGroupsAttachEndpointsRequestrC   r   ru   r   rv   rw   s         r   _AttachGlobalEndpointsz2NetworkEndpointGroupsClient._AttachGlobalEndpointsL  u     	UU  	GG  $\\^:N!99)D;
G 66w??r   c           	         | j                   j                  }| j                   j                  } ||j                         |j                   || j                  |                  }| j                  j                  |      S )z@Detaches network endpoints from a global network endpoint group.rp   )r5   r   1globalNetworkEndpointGroupsDetachEndpointsRequest)r   ?ComputeGlobalNetworkEndpointGroupsDetachNetworkEndpointsRequest1GlobalNetworkEndpointGroupsDetachEndpointsRequestrC   r   ru   r   r   rw   s         r   _DetachGlobalEndpointsz2NetworkEndpointGroupsClient._DetachGlobalEndpoints]  r   r   c                    g }|D ]  }| j                   j                         }d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        |j                  |        |S )z=Convert endpoints to a list which can be passed in a request.r~   ipipv6portfqdnzclient-destination-port)
r   NetworkEndpointgetr~   	ipAddressipv6Addressr   r   clientDestinationPortappend)r   rx   output_listr   message_endpoints        r   ru   z3NetworkEndpointGroupsClient._GetEndpointMessageListn  s    K!668	|	#$0$4$4Z$@!		%1%5%5d%;"	<	'3'7'7'?$	<	 , 0 0 8	<	 , 0 0 8	"l	21=1A1A%2
. )*! "$ r   c                 P    | j                   j                  |j                  d      S )Nzcompute.zoneOperationsr    r   r9   selfLinkr   	operations     r   _GetOperationsRefz-NetworkEndpointGroupsClient._GetOperationsRef  s*    >>'?    r   c                 P    | j                   j                  |j                  d      S )Nzcompute.regionOperationsr    r   r   s     r   _GetRegionalOperationsRefz5NetworkEndpointGroupsClient._GetRegionalOperationsRef  *    >>'A    r   c                 P    | j                   j                  |j                  d      S )Nzcompute.globalOperationsr    r   r   s     r   _GetGlobalOperationsRefz3NetworkEndpointGroupsClient._GetGlobalOperationsRef  r   r   c                 6    |rt        j                  |||      S y N)r   WaitFor)r   operation_polleroperation_refmessages       r   _WaitForResultz*NetworkEndpointGroupsClient._WaitForResult  s    ^^,mWEEr   c           	          d}d}d}t        |d      rkt        j                  | j                        }|r#| j	                  ||      }| j                  |      }|r| j                  ||      }| j                  |      }nt        |d      rjt        j                  | j                        }|r#| j                  ||      }| j                  |      }|r| j                  ||      }| j                  |      }nit        j                  | j                        }|r#| j                  ||      }| j                  |      }|r#| j                  ||      }| j                  |      }|j                         }d}	| j!                  ||dj#                  |rt%        |      nd|            xs |	}	|r#| j'                  |      rdj#                  |      }
ndj#                  |rt%        |      nd|      }
| j!                  |||
      xs |	}	|	S )z)Updates a Compute Network Endpoint Group.Nr   r   z!Attaching {0} endpoints to [{1}].r   zDetaching endpoints from [{0}].z#Detaching {0} endpoints from [{1}].)r   r   Pollerr   r{   r   r   r   r   r   r   r   r   r   r   rC   r   formatr   r   )r   rK   add_endpointsremove_endpointsattach_endpoints_refdetach_endpoints_refr   r   neg_nameresultremove_endpoints_error_messages              r   Updatez"NetworkEndpointGroupsClient.Update  s   wt':':;	..wF	#55i@	..w8HI	#55i@	(	#t';';<	11'=I	#==iH	11';KL	#==iHt';';<	//G	#;;IF	//9IJ	#;;IF||~HF /66&3M"H	
 	   D<<=MN'H'O'O
($
 0
6
6'7c"#Q % 	 *	
 	
   Mr   c                     | j                   j                  j                  }t        j                  ||      }||j
                  |j                  hv S r   )r   rA   rB   r	   rD   INTERNET_FQDN_PORTINTERNET_IP_PORTr   rL   rj   endpoint_type_enum_values       r   r7   z*NetworkEndpointGroupsClient._IsInternetNeg  sY    **MM   )551  $--++(  r   c                     | j                   j                  j                  }t        j                  ||      }||j
                  k(  S )z7Checks if the NEG in the request is a Port Mapping NEG.)r   rA   rB   r	   rD   GCE_VM_IP_PORTMAPr   s       r   r8   z-NetworkEndpointGroupsClient._IsPortMappingNeg  sI     	**MM   )551  $'9'K'KKKr   )NNNNNNNFNNNNNNNNNN)NN)__name__
__module____qualname____doc__r   rn   r{   r   r   r   r   r   r   ru   r   r   r   r   r   r7   r8    r   r   r   r      s    B( "%)%)$(%)+M^?$?$@$@$@"@".



@D
Lr   r   N)r   
__future__r   r   r   googlecloudsdk.api_lib.computer   r;   )googlecloudsdk.api_lib.compute.operationsr   googlecloudsdk.api_lib.utilr   $googlecloudsdk.command_lib.util.apisr	   objectr   r   r   r   <module>r      s/    ) &  ' = < . :XL& XLr   