
                             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ZdZ G d dej,                        ZddZd Zd Zd Zd Zd Zy)z%CLI Utilities for cloud tpu commands.    )absolute_import)division)unicode_literalsN)
exceptions)peering)apis)util)
properties)	resourcesz;Error determining VPC peering status for network [{}]: [{}]z7Network [{}] is invalid for use with Service Networkingc                       e Zd ZdZy)ServiceNetworkingExceptionzEException for creation failures involving Service Networking/Peering.N)__name__
__module____qualname____doc__     3lib/googlecloudsdk/command_lib/compute/tpus/util.pyr   r   &   s    Mr   r   c                 .    t        j                  d|       S )Ntpu)r   GetMessagesModule)versions    r   r   r   *   s    			w	//r   c                 H    ~ ~t               j                         }||_        |S )z/Declarative request hook for TPU Start command.)r   StartNodeRequeststartNodeRequest)refargsrequeststart_requests       r   StartRequestHookr    .   s&    	
#%668-*'	.r   c                 H    ~ ~t               j                         }||_        |S )z.Declarative request hook for TPU Stop command.)r   StopNodeRequeststopNodeRequest)r   r   r   stop_requests       r   StopRequestHookr%   7   s&    	
"$446,('	.r   c                     	 t         j                  j                         }|j                  | d      }|j                  }t        j                  |      S # t         j
                  $ r |}Y ,w xY w)z<Retrieves the project field from the provided network value.zcompute.networks)
collection)r   REGISTRYCloneParseprojectErrorprojects_command_utilGetProjectNumber)networkuser_projectregistrynetwork_refproject_identifiers        r   _ParseProjectNumberFromNetworkr4   @   so    &!!'')H..,> ! @K$,,
 
	/	/0B	CC	 
 &%&s   =A A,+A,c                 P   ~ |j                   }|r|j                  xs4 t        j                  j                  j                  j                  d      }	 t        |j                  |      }t        j                  |dt        j                  j                  |j                              }|s(t#        t(        j'                  |j                              |S # t        j                  t        j                   f$ r/}t#        t$        j'                  |j                  ||            d}~ww xY w)a  Validates that supplied network has been peered to a GoogleOrganization.

     Uses the Service Networking API to check if the network specified via
     --network flag has been peered to Google Organization. If it has, proceeds
     with TPU create operation otherwise will raise ServiceNetworking exception.
     Check is only valid if --use-service-networking has been specified
     otherwise check will return immediately.

  Args:
    ref: Reference to the TPU Node resource to be created.
    args: Argument namespace.
    request: TPU Create requests message.

  Returns:
    request: Passes requests through if args pass validation

  Raises:
    ServiceNetworkingException: if network is not properly peered
  T)requiredz servicenetworking.googleapis.comN)use_service_networkingr+   r
   VALUEScoreGetr4   r/   r   ListConnectionsospathbasenamer   (ListConnectionsPermissionDeniedExceptionapitools_exceptions	HttpErrorr   _PROJECT_LOOKUP_ERRORformat_PEERING_VALIDATION_ERROR)r   r   r   service_networking_enabledr+   network_project_numberlookup_resultes           r   CreateValidateVPCHookrI   N   s   ( 
#::llOj//44<<@@$@OG
B=dll>E G --
 "D
''

4<<
(*m &
#
*
*4<<
8: : 
. ??))+ B&

&
&t||Wa
@B BBs   AC #D%6*D  D%c                     ~g }| D ];  }|j                   D ]*  }||j                  |j                  |j                  dgz  }, = |j                  d        |S )z;Reformat to extract topologies and sort by acceleratorType.)topologytypeacceleratorTypec                 B    t        | d   j                  d      d         S )NrM   -   )intsplit)xs    r   <lambda>z,ListTopologiesResponseHook.<locals>.<lambda>   s    c!$5"6"<"<S"A!"DEr   )key)acceleratorConfigsrK   rL   sort)responser   resultsaccelerator_typeaccelerator_configs        r   ListTopologiesResponseHookr\   y   sl    
'".AA(11$))-22 	 	g B # 
,,F,G	.r   )v1)r   
__future__r   r   r   r<   apitools.base.pyr   r@   googlecloudsdk.api_lib.servicesr   googlecloudsdk.api_lib.utilr   #googlecloudsdk.command_lib.projectsr	   r-   googlecloudsdk.corecore_exceptionsr
   r   rB   rD   r,   r   r   r    r%   r4   rI   r\   r   r   r   <module>re      sr    , &  ' 	 > 6 3 , M = * )2 7 N!6!6 N0D(Vr   