
                         :   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lmZ ej*                   ej,                  ej.                  j0                         G d dej2                                      Zy)z(Create Dataproc on GDCE cluster command.    )absolute_import)division)unicode_literalsN)dataproc)
exceptions)base)api_util)clusters)flags)gke_workload_identity)	instances)logc                   N    e Zd ZdZddiZed        Zd Zed        Z	ed        Z
y)	Createz+Create a Dataproc instance on GDCE cluster.EXAMPLESz          Create a Dataproc on GDCE cluster in us-central1 in
          the same project and region with default values:

            $ {command} my-instance --region=us-central1 --gdce-cluster=my-gdce-cluster
          c                 "   t        j                  | j                               }t        j                  j                  |       t        j                  |d|j                         t        j                  |d       t        j                  |       y )Ncreate35m)default)dpDataprocReleaseTrackr   
ASYNC_FLAGAddToParserr   AddInstanceResourceArgapi_versionAddTimeoutFlagAddGdceClusterResourceArg)clsparserr   s      (lib/surface/dataproc/instances/create.pyArgszCreate.Args2   sc    {{3++-.HOO'	  83G3GH 
/	##F+    c           	      "   t        j                  | j                               }|j                  j                  j                         }|j                  j                  j                         }t        j                  |||      }t        j                  |||       |j                  j                  ||j                  |j                        }t        j                  ||||j                   |j"                  dd       }t%        j&                  |      S )N)virtualClusterConfigclusterName	projectIdF)enable_create_on_gke action_on_failed_primary_workers)r   r   r   CONCEPTSinstanceParsegdce_clusterr   _GetVirtualClusterConfig_SetupWorkloadIdentitymessagesClusterr&   r'   r
   CreateClusterasync_timeoutr   ConvertClusterToInstance)selfargsr   instance_refgdce_cluster_refvirtual_cluster_configclusters          r!   Runz
Create.Run=   s    {{4,,./H==))//1L}}11779#<<"D* !!$6FG''3 ,,(( ( *G
 $$")-/G --g66r#   c                 *   t        j                  d|j                               }|rdj                  |d   |d         }t	        j
                  |      }| j                  j                  |j                         |j                  j                  |j                  j                        }| j                  j                  |      }| j                  j                  |      }|S t        j                  d	j                  |j                                     )
aZ  Get dataproc virtual cluster configuration for GDCE based clusters.

    Args:
      dataproc: Dataproc object that contains client, messages, and resources
      gdce_cluster_ref: GDCE cluster reference.
      args: Arguments parsed from argparse.ArgParser.

    Returns:
      virtual_cluster_config: Dataproc virtual cluster configuration
    z*projects/(.*)/locations/(.*)/clusters/(.*)z?projects/{project_id}/locations/global/memberships/{membership}      )
project_id
membership)gdcEdgeMembershipTargetgdcEdgeWorkloadIdentityPoolgdcEdgeIdentityProvider)gdceClusterConfig)kubernetesClusterConfigzInvalid GDCE cluster: {})researchRelativeNameformatr	   GetMembershipr0   GdceClusterConfig	authorityworkloadIdentityPoolidentityProviderKubernetesClusterConfigVirtualClusterConfigr   Error)	r   r9   r7   matchesmembership_full_namecontainer_membershipgdce_cluster_configkubernetes_cluster_configr:   s	            r!   r.   zCreate._GetVirtualClusterConfigW   s    ii4%%'G 
K6WQZGAJ6?  &334HI$--??"2"?"?"A&:&D&D&Y&Y"6"@"@"Q"Q @  #+"3"3"K"K/ #L #  (00EE";  F   $#
$
+
+,<,I,I,K
L r#   c                 |   dg}ddg}d}d}t         j                  j                  |j                        }t	        j
                  d||       t         j                  j                  |j                  |||       t	        j
                  d||       t         j                  j                  |j                  |||       y )	Nzdataproc-operatorzspark-driverzspark-executorr   zdataproc-environment-defaultzdSetting up Workload Identity for the following GSA to operatorKSAs %s in the default "%s" namespace.)r@   	gsa_emailk8s_namespacek8s_service_accountsziSetting up Workload Identity for the following GSA to defaultspark KSAs %s in the default "%s" namespace.)r   &DefaultDataprocDataPlaneServiceAccountGet
projectsIdr   debugGkeWorkloadIdentityUpdateGsaIamPolicy)r7   cluster_refgke_cluster_refoperator_ksa	spark_ksaoperator_namespacedefault_job_env_namespacedefault_gsas           r!   r/   zCreate._SetupWorkloadIdentity   s    '(L!12I# > 	DDHH&&	
  II5 	 --@@"--()	 A  II; 	! --@@"--/&	 A r#   N)__name__
__module____qualname____doc__detailed_helpclassmethodr"   r<   staticmethodr.   r/    r#   r!   r   r   #   sZ     4 - , ,74 ) )V * *r#   r   )rl   
__future__r   r   r   rG   googlecloudsdk.api_lib.dataprocr   r   r   googlecloudsdk.callioper   *googlecloudsdk.command_lib.container.fleetr	   #googlecloudsdk.command_lib.dataprocr
   r   r   r   googlecloudsdk.corer   HiddenReleaseTracksr   ALPHACreateCommandr   rp   r#   r!   <module>r{      sz     / &  ' 	 : 6 ( ? 8 5 E 9 # D%%++,IT I - Ir#   