
    `8                         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j                        Z G d
 de      Z G d de      Zy)z;Base class for gkemulticloud API clients for AWS resources.    )absolute_import)division)unicode_literals)client)update_mask)flagsc                       e 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 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)_AwsClientBasez-Base class for AWS gkemulticloud API clients.c                    | j                   j                  }| j                  ||      | j                  |      t	        j
                  |      | j                  |      | j                  |      t        j                  |      | j                  |      t        j                  |      t        j                  |      |j                  | j                  |      d}t        |j!                               r | j                   j                  di |S d S )N)annotationsauthorization	awsRegionbinaryAuthorizationcontrolPlanedescriptionfleetloggingConfigmonitoringConfigname
networking )	_messages$GoogleCloudGkemulticloudV1AwsCluster_Annotations_Authorization	aws_flagsGetAwsRegion_BinaryAuthorization_ControlPlaner   GetDescription_Fleet
GetLoggingGetMonitoringConfigawsClustersId_ClusterNetworkinganyvalues)selfcluster_refargscluster_typekwargss        9lib/googlecloudsdk/api_lib/container/gkemulticloud/aws.py_Clusterz_AwsClientBase._Cluster   s    >>FFL((|<,,T2++D1#88>**40++D1T"))$/!55d;))--d3F v}} 	<;;EfE     c                    | j                   j                  }| j                  ||      | j                  |      | j	                  |      | j                  |      | j                  |      | j                  |      |j                  t        j                  |      | j                  |      t        j                  |      d
}t        |j                               r | j                   j                  di |S d S )N)
r   autoscalingconfigkubeletConfigmaxPodsConstraint
managementr   subnetIdupdateSettingsversionr   )r   %GoogleCloudGkemulticloudV1AwsNodePoolr   _NodePoolAutoscaling_NodeConfig_KubeletConfig_MaxPodsConstraint_NodeManagementawsNodePoolsIdr   GetSubnetID_UpdateSettingsGetNodeVersionr&   r'   )r(   node_pool_refr*   nodepool_typer,   s        r-   	_NodePoolz_AwsClientBase._NodePool3   s    NNHHM((}=006""4(,,T2!44T:**40,,%%d+..t4''-F v}} 	=<<FvF r/   c                 $   t        j                  |      t        j                  |      t        j                  |      t        j
                  |      d}t        d |j                         D              r | j                  j                  di |S d S )N)podAddressCidrBlocksserviceAddressCidrBlocksvpcIdperNodePoolSgRulesDisabledc              3   $   K   | ]  }|d u 
 y w)Nr   ).0xs     r-   	<genexpr>z4_AwsClientBase._ClusterNetworking.<locals>.<genexpr>R   s     6oq}os   r   )
r   GetPodAddressCidrBlocksGetServiceAddressCidrBlocksr   GetVpcIdGetPerNodePoolSGRulesDisabledr&   r'   r   .GoogleCloudGkemulticloudV1AwsClusterNetworkingr(   r*   r,   s      r-   r%   z!_AwsClientBase._ClusterNetworkingG   s     % = =d C$)$E$Ed$K##D)&/&M&M'
	F 6fmmo66 	FEEOO r/   c                    | j                   j                  }| j                  |      | j                  |      | j	                  |      t        j                  |      | j                  |      t        j                  |      | j                  |d      | j                  |      | j                  |d      t        j                  |      | j                  |      t        j                  |      t        j                  |      | j!                  ||      d}t#        |j%                               r | j                   j                  di |S d S )Nmainroot)awsServicesAuthenticationconfigEncryptiondatabaseEncryptioniamInstanceProfileinstancePlacementinstanceType
mainVolumeproxyConfig
rootVolumesecurityGroupIds	sshConfig	subnetIdsr8   tagsr   )r   )GoogleCloudGkemulticloudV1AwsControlPlane_ServicesAuthentication_ConfigEncryption_DatabaseEncryptionr   GetIamInstanceProfile_InstancePlacementGetInstanceType_VolumeTemplate_ProxyConfigGetSecurityGroupIds
_SshConfigGetSubnetIdsr   GetClusterVersion_Tagsr&   r'   )r(   r*   control_plane_typer,   s       r-   r   z_AwsClientBase._ControlPlaneV   s   @@  &*%A%A$%G 2248"66t<'==dC!44T:!11$7**48((.**48%99$?__T*++D1**40

4!34F$ v}} 	A@@J6J r/   c                    t        j                  |      }t        j                  |      }|s|sy i }|r-|D cg c]  }| j                  j	                  |        c}|d<   |r-|D cg c]  }| j                  j                  |        c}|d<   t        |j                               sy  | j                  j                  di |S c c}w c c}w )N)username
adminUsers)groupadminGroupsr   )	r   GetAdminUsersGetAdminGroupsr   (GoogleCloudGkemulticloudV1AwsClusterUser)GoogleCloudGkemulticloudV1AwsClusterGroupr&   r'   *GoogleCloudGkemulticloudV1AwsAuthorization)r(   r*   admin_usersadmin_groupsr,   ugs          r-   r   z_AwsClientBase._Authorizationp   s    %%d+K''-L|F
 	 a ..
A
A B  	f\   a ..
B
B
B
Kf] v}}AAA 	
	
s   #C'#Cc                     t        j                  |      t        j                  |      d}t        |j	                               sy  | j
                  j                  di |S )N)roleArnroleSessionNamer   )r   
GetRoleArnGetRoleSessionNamer&   r'   r   3GoogleCloudGkemulticloudV1AwsServicesAuthenticationrT   s      r-   rf   z&_AwsClientBase._ServicesAuthentication   sY    ''-$77=F v}}M4>>MM 
 r/   c                     t        j                  |      t        j                  |      d}t        |j	                               r | j
                  j                  di |S d S )N)	secretArnsecretVersionr   )r   GetProxySecretArnGetProxySecretVersionIdr&   r'   r   (GoogleCloudGkemulticloudV1AwsProxyConfigrT   s      r-   rm   z_AwsClientBase._ProxyConfig   s^    006"::4@F v}} 	@??I&I r/   c                 j   i }|dk(  ryt        j                  |      |d<   t        j                  |      |d<   t        j                  |      |d<   t        j
                  |      |d<   t        j                  |      |d<   n}|dk(  rxt        j                  |      |d<   t        j                  |      |d<   t        j                  |      |d<   t        j                  |      |d<   t        j                  |      |d<   t        |j                               r | j                  j                  di |S d S )	NrV   iops	kmsKeyArnsizeGib
volumeType
throughputrW   r   )r   GetMainVolumeIopsGetMainVolumeKmsKeyArnr   GetMainVolumeSizeGetMainVolumeTypeGetMainVolumeThroughputGetRootVolumeIopsGetRootVolumeKmsKeyArnGetRootVolumeSizeGetRootVolumeTypeGetRootVolumeThroughputr&   r'   r   +GoogleCloudGkemulticloudV1AwsVolumeTemplate)r(   r*   kindr,   s       r-   rl   z_AwsClientBase._VolumeTemplate   s   Fv~ 2248fVn%<<TBf[11$7fY&88>f\&>>tDf\	 2248fVn%<<TBf[11$7fY&88>f\&>>tDf\ v}} 	CBBLVL r/   c                     dt        j                  |      i}t        |j                               r | j                  j
                  di |S d S Nr   r   )r   GetDatabaseEncryptionKmsKeyArnr&   r'   r   /GoogleCloudGkemulticloudV1AwsDatabaseEncryptionrT   s      r-   rh   z"_AwsClientBase._DatabaseEncryption   sP    9CCDIJF v}} 	GFFPP r/   c                     dt        j                  |      i}t        |j                               r | j                  j
                  di |S d S r   )r   GetConfigEncryptionKmsKeyArnr&   r'   r   -GoogleCloudGkemulticloudV1AwsConfigEncryptionrT   s      r-   rg   z _AwsClientBase._ConfigEncryption   sP    9AA$GHF v}} 	EDDNvN r/   c                     dt        j                  |      i}t        |j                               r | j                  j
                  di |S d S )N
ec2KeyPairr   )r   GetSshEC2KeyPairr&   r'   r   &GoogleCloudGkemulticloudV1AwsSshConfigrT   s      r-   ro   z_AwsClientBase._SshConfig   sO    I66t<=F v}} 	>==GG r/   c                     dt        j                  |      i}t        |j                               r | j                  j
                  di |S d S )NinstanceTypesr   )r   GetSpotInstanceTypesr&   r'   r   $GoogleCloudGkemulticloudV1SpotConfigrT   s      r-   _SpotConfigz_AwsClientBase._SpotConfig   sO    y==dCDF v}} 	<;;EfE r/   c                     dt        j                  |      i}t        |j                               r | j                  j
                  di |S d S )Ntenancyr   )r   GetInstancePlacementr&   r'   r   .GoogleCloudGkemulticloudV1AwsInstancePlacementrT   s      r-   rj   z!_AwsClientBase._InstancePlacement   sP    77=>F v}} 	FEEOO r/   c                     t        j                  |      t        j                  |      d}t        |j	                               sy  | j
                  j                  di |S )N)granularitymetricsr   )r    GetAutoscalingMetricsGranularityGetAutoscalingMetricsr&   r'   r   >GoogleCloudGkemulticloudV1AwsAutoscalingGroupMetricsCollectionrT   s      r-   _AutoScalingMetricsCollectionz,_AwsClientBase._AutoScalingMetricsCollection   sY     AA$G2248F v}}X4>>XX 
 r/   c                     dt        j                  |      i}t        |j                               r | j                  j
                  di |S d S )N
autoRepairr   )r   GetAutoRepairr&   r'   r   +GoogleCloudGkemulticloudV1AwsNodeManagementrT   s      r-   r>   z_AwsClientBase._NodeManagement   sR    e))$/F
 v}} 	CBBLVL r/   c                     d| j                  |      i}t        |j                               r | j                  j                  di |S d S )NsurgeSettingsr   )_SurgeSettingsr&   r'   r   (GoogleCloudGkemulticloudV1UpdateSettingsrT   s      r-   rA   z_AwsClientBase._UpdateSettings   sR    ,,T2F
 v}} 	@??I&I r/   c                     t        j                  |      t        j                  |      d}t        |j	                               r | j
                  j                  di |S d S )N)maxSurgemaxUnavailabler   )r   GetMaxSurgeUpdateGetMaxUnavailableUpdater&   r'   r   'GoogleCloudGkemulticloudV1SurgeSettingsrT   s      r-   r   z_AwsClientBase._SurgeSettings   s]    ++D177=F v}} 	?>>HH r/   c                    | j                   j                  }| j                  |      t        j                  |      t        j                  |      | j                  |      t        j                  |      | j                  |      | j                  |d      t        j                  |      | j                  |      | j                  |      t        j                  |      | j                  ||      | j!                  ||      | j#                  |      d}t%        |j'                               r | j                   j                  di |S d S )NrW   )rY   r[   	imageTyper\   r]   r_   r`   ra   
spotConfigrb   taintslabelsrd   autoscalingMetricsCollectionr   )r   'GoogleCloudGkemulticloudV1AwsNodeConfigrg   r   ri   r   GetImageTyperj   rk   rm   rl   rn   r   ro   GetNodeTaints_Labelsrr   r   r&   r'   )r(   r*   node_config_typer,   s       r-   r;   z_AwsClientBase._NodeConfig  s   ~~MM 2248'==dC''-!44T:!11$7((.**48%99$?&&t,__T*%%d+,,t%56

4!12(,(J(J)
F( v}} 	?>>HH r/   c                    t        j                  |      t        j                  |      t        j                  |      t        j                  |      d}t        |j                               r | j                  j                  di |S d S )N)cpuManagerPolicycpuCfsQuotacpuCfsQuotaPeriodpodPidsLimitr   )	r    GetKubeletConfigCpuManagerPolicyGetKubeletConfigCpuCfsQuota!GetKubeletConfigCpuCfsQuotaPeriodGetKubeletConfigPodPidsLimitr&   r'   r   +GoogleCloudGkemulticloudV1NodeKubeletConfigrT   s      r-   r<   z_AwsClientBase._KubeletConfig   sz    %FFtL <<TB&HHN!>>tD	F v}} 	CBBLVL r/   c                     t        j                  |      t        j                  |      d}t        |j	                               sy  | j
                  j                  di |S )N)minNodeCountmaxNodeCountr   )r   GetMinNodesGetMaxNodesr&   r'   r   0GoogleCloudGkemulticloudV1AwsNodePoolAutoscalingrT   s      r-   r:   z#_AwsClientBase._NodePoolAutoscaling-  sY    ))$/))$/F v}}J4>>JJ 
 r/   N)__name__
__module____qualname____doc__r.   rE   r%   r   r   rf   rm   rl   rh   rg   ro   r   rj   r   r>   rA   r   r;   r<   r:   r   r/   r-   r
   r
      si    5*(44		(		4	r/   r
   c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )ClustersClientz1Client for AWS Clusters in the gkemulticloud API.c                 p    t        t        | 
  di | | j                  j                  | _        d| _        y )NawsClustersr   )superr   __init___clientprojects_locations_awsClusters_service_list_result_fieldr(   r,   	__class__s     r-   r   zClustersClient.__init__<  s.    	.$(262LL??DM+Dr/   c                    | j                   j                  |j                  | j                  ||      |j	                         j                         t        j                  |            }| j                  j                  |      S )z!Creates an Anthos cluster on AWS.)awsClusterId$googleCloudGkemulticloudV1AwsClusterparentvalidateOnly)
r   6GkemulticloudProjectsLocationsAwsClustersCreateRequestr$   r.   ParentRelativeNamer   GetValidateOnlyr   Creater(   r)   r*   reqs       r-   r   zClustersClient.CreateA  sm    
..
O
O ..-1]];-M!!#002**40	 P C ==$$r/   c                     | j                   j                  |j                               }| j                  j	                  |      S )z7Generates an access token for an Anthos cluster on AWS.)
awsCluster)r   FGkemulticloudProjectsLocationsAwsClustersGenerateAwsAccessTokenRequestr   r   GenerateAwsAccessToken)r(   r)   r   s      r-   GenerateAccessTokenz"ClustersClient.GenerateAccessTokenK  s?    
..
_
_++- ` C ==//44r/   c                    | j                   j                  | j                  ||      |j                         t	        j
                  |t        j                        t        j                  |            }| j                  j                  |      S )z!Updates an Anthos cluster on AWS.)r   r   
updateMaskr   )r   5GkemulticloudProjectsLocationsAwsClustersPatchRequestr.   r   r   GetUpdateMask AWS_CLUSTER_ARGS_TO_UPDATE_MASKSr   r   r   Patchr   s       r-   UpdatezClustersClient.UpdateR  sv    
..
N
N-1]];-M%%',,+>>
 **40 O C ==s##r/   )	r   r   r   r   r   r   r  r  __classcell__r   s   @r-   r   r   9  s    9,
%5
$r/   r   c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )NodePoolsClientz3Client for AWS node pools in the gkemulticloud API.c                 p    t        t        | 
  di | | j                  j                  | _        d| _        y )NawsNodePoolsr   )r   r  r   r   +projects_locations_awsClusters_awsNodePoolsr   r   r   s     r-   r   zNodePoolsClient.__init__b  s.    	/4)3F3LLLLDM,Dr/   c                    | j                   j                  |j                  | j                  ||      |j	                         j                         t        j                  |            }| j                  j                  |      S )z1Creates an node pool in an Anthos cluster on AWS.)awsNodePoolId%googleCloudGkemulticloudV1AwsNodePoolr   r   )
r   BGkemulticloudProjectsLocationsAwsClustersAwsNodePoolsCreateRequestr?   rE   r   r   r   r   r   r   r(   rC   r*   r   s       r-   r   zNodePoolsClient.Createg  sr    
..
[
[#22.2nn4/
 ##%224**40 \ C ==$$r/   c                    | j                   j                  | j                  ||      |j                         t	        j
                  |t        j                        t        j                  |            }| j                  j                  |      S )z0Updates a node pool in an Anthos cluster on AWS.)r  r   r  r   )r   AGkemulticloudProjectsLocationsAwsClustersAwsNodePoolsPatchRequestrE   r   r   r  !AWS_NODEPOOL_ARGS_TO_UPDATE_MASKSr   r   r   r
  r  s       r-   r  zNodePoolsClient.Updates  s{    
..
Z
Z.2nn4/
 ''),,+??
 **40 [ 	C ==s##r/   c                     | j                   j                  |j                         | j                   j                  t	        j
                  |                  }| j                  j                  |      S )z3Rolls back a node pool in an Anthos cluster on AWS.)
respectPdb)r   :googleCloudGkemulticloudV1RollbackAwsNodePoolUpdateRequest)r   DGkemulticloudProjectsLocationsAwsClustersAwsNodePoolsRollbackRequestr   :GoogleCloudGkemulticloudV1RollbackAwsNodePoolUpdateRequestr   GetRespectPodDisruptionBudgetr   Rollbackr  s       r-   r!  zNodePoolsClient.Rollback  so    
..
]
]'')CG>>  DM  DM::4@ DM D
 ^ C ==!!#&&r/   )	r   r   r   r   r   r   r  r!  r  r  s   @r-   r  r  _  s    ;-

%$'r/   r  N)r   
__future__r   r   r   .googlecloudsdk.api_lib.container.gkemulticloudr   r   (googlecloudsdk.command_lib.container.awsr   r   2googlecloudsdk.command_lib.container.gkemulticloud
ClientBaser
   r   r  r   r/   r-   <module>r'     sN    B &  ' A F G D[V&& [|#$^ #$L*'n *'r/   