
    X                         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 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y)zKUtilities for gkeonprem API clients for bare metal admin cluster resources.    )absolute_import)division)unicode_literals)
exceptions)
list_pager)client)update_mask)arg_parsers)parser_extensions)
properties)gkeonprem_v1_messagesc                      e Zd ZdZdej
                  fdZdej
                  fdZdej
                  fdZdej
                  fdZ	dej
                  fdZ
dej
                  fdZdej
                  fd	Zdej
                  fd
Zdej
                  fdZdej
                  fdZdej
                  fdZd Zd Zdej
                  fdZdej
                  fdZdej
                  fdZd Zd Zdej
                  fdZdej
                  fdZdej
                  fdZdej
                  fdZdej
                  fdZdej
                  fdZdej
                  fdZdej
                  fdZdej
                  fdZ dej
                  fdZ!dej
                  fdZ"dej
                  fd Z#dej
                  fd!Z$dej
                  fd"Z%y#)$_BareMetalAdminClusterClientz?Base class for GKE OnPrem Bare Metal Admin Cluster API clients.argsc                 
   t        |di       }g }|sy|j                         D ]?  \  }}|j                  t        j                  j
                  j                  ||             A t        j                  j                  |      S )z*Constructs proto message AnnotationsValue.annotationsNkeyvalueadditionalProperties)getattritemsappendmessagesBareMetalAdminClusterAnnotationsValueAdditionalProperty)selfr   r   additional_property_messagesr   r   s         Klib/googlecloudsdk/api_lib/container/gkeonprem/bare_metal_admin_clusters.py_annotationsz)_BareMetalAdminClusterClient._annotations#   s    $r2K#% !'')
U"))

(
(
9
9
L
LU M  * ))::9 ;      c                     t        |dg       t        |dg       d}t        |j                               rt        j                  di |S y)z<Constructs proto message BareMetalAdminIslandModeCidrConfig.'island_mode_service_address_cidr_blocks#island_mode_pod_address_cidr_blocks)serviceAddressCidrBlockspodAddressCidrBlocksN )r   anyvaluesr   "BareMetalAdminIslandModeCidrConfigr   r   kwargss      r!   _island_mode_cidr_configz5_BareMetalAdminClusterClient._island_mode_cidr_config5   sT     %,;R%
 !(7!
	F 6==?88B6BBr#   c                     d| j                  |      i}t        |j                               rt        j                  di |S y)z5Constructs proto message BareMetalAdminNetworkConfig.islandModeCidrNr)   )r/   r*   r+   r   BareMetalAdminNetworkConfigr-   s      r!   _network_configz,_BareMetalAdminClusterClient._network_configE   sB     	$77=F 6==?11;F;;r#   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z1Constructs proto message BareMetalAdminVipConfig.controlPlaneVipcontrol_plane_vipNr)   )r   r*   r+   r   BareMetalAdminVipConfigr-   s      r!   _vip_configz(_BareMetalAdminClusterClient._vip_configP   sA     	74)<dCF 6==?--777r#   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z2Constructs proto message BareMetalAdminPortConfig.controlPlaneLoadBalancerPort control_plane_load_balancer_portNr)   )r   r*   r+   r   BareMetalAdminPortConfigr-   s      r!   _port_configz)_BareMetalAdminClusterClient._port_config[   sD     	'4d)
F 6==?..888r#   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z6Constructs proto message BareMetalAdminManualLbConfig.enabledenable_manual_lbFNr)   )r   r*   r+   r   BareMetalAdminManualLbConfigr-   s      r!   _manual_lb_configz._BareMetalAdminClusterClient._manual_lb_configh   sA     	74!3U;F 6==?22<V<<r#   c                     | j                  |      | j                  |      | j                  |      d}t        |j	                               rt        j                  di |S y)z:Constructs proto message BareMetalAdminLoadBalancerConfig.)manualLbConfig
portConfig	vipConfigNr)   )rB   r=   r8   r*   r+   r    BareMetalAdminLoadBalancerConfigr-   s      r!   _load_balancer_configz2_BareMetalAdminClusterClient._load_balancer_configs   s\     006''-%%d+F 6==?66@@@r#   c                     t        |dd      t        |dd      d}t        |j                               rt        j                  di |S y),Constructs proto message BareMetalLvpConfig.lvp_share_pathNlvp_share_storage_classpathstorageClassr)   r   r*   r+   r   BareMetalLvpConfigr-   s      r!   _lvp_configz(_BareMetalAdminClusterClient._lvp_config   sL     .5&?FF
 6==?((2622r#   c                     | j                  |      t        |dd      d}t        |j                               rt	        j
                  di |S y)z1Constructs proto message BareMetalLvpShareConfig.lvp_share_path_pv_countN)	lvpConfigsharedPathPvCountr)   )rR   r   r*   r+   r   BareMetalLvpShareConfigr-   s      r!   _lvp_share_configz._BareMetalAdminClusterClient._lvp_share_config   sM     %%d+$T+DdKF
 6==?--777r#   c                     t        |dd      t        |dd      d}t        |j                               rt        j                  di |S y)rJ   lvp_node_mounts_config_pathN$lvp_node_mounts_config_storage_classrM   r)   rP   r-   s      r!   _lvp_node_mounts_configz4_BareMetalAdminClusterClient._lvp_node_mounts_config   sO     ;TB8$
F 6==?((2622r#   c                     | j                  |      | j                  |      d}t        |j                               rt	        j
                  di |S y)z5Constructs proto message BareMetalAdminStorageConfig.)lvpShareConfiglvpNodeMountsConfigNr)   )rX   r\   r*   r+   r   BareMetalAdminStorageConfigr-   s      r!   _storage_configz,_BareMetalAdminClusterClient._storage_config   sN     006#;;DAF
 6==?11;F;;r#   c                     g }|sy|j                         D ]?  \  }}|j                  t        j                  j                  j                  ||             A t        j                  j	                  |      }|S )%Constructs proto message LabelsValue.Nr   r   )r   r   r   BareMetalNodeConfigLabelsValuer   )r   labelsr    r   r   labels_value_messages         r!   _node_labelsz)_BareMetalAdminClusterClient._node_labels   s    #% lln
U"))

&
&
2
2
E
EU F  % $77CC9 D   r#   c                     |j                  dd      }|st        j                  dd      || j                  |j                  di             d}t	        j
                  di |S )-Constructs proto message BareMetalNodeConfig.nodeIP &--control_plane_node_configs_from_filez:Missing field [nodeIP] in Control Plane Node configs file.rf   nodeIprf   r)   )getr   BadArgumentExceptionrh   r   rd   )r   control_plane_node_confignode_ipr.   s       r!   _control_plane_node_configz7_BareMetalAdminClusterClient._control_plane_node_config   sp    '++Hb9G++
2
F  ##%))(B7
F ''1&11r#   c                     |j                   sg S |j                   j                  dg       }|st        j                  dd      g }|D ]"  }|j	                  | j                  |             $ |S ),Constructs proto message field node_configs.nodeConfigsrm   z?Missing field [nodeConfigs] in Control Plane Node configs file.)$control_plane_node_configs_from_filerp   r   rq   r   rt   )r   r   control_plane_node_configs#control_plane_node_configs_messagesrr   s        r!   %_control_plane_node_configs_from_filezB_BareMetalAdminClusterClient._control_plane_node_configs_from_file   s     44i!%!J!J!N!Nr" &++
2
K 
 +-'%?!)00

)
)*C
D &@
 /.r#   c                     g }t        |di       }|sg S |j                         D ]7  }| j                  |      }|j                  t	        j
                  di |       9 |S )z#Constructs proto message NodeTaint.control_plane_node_taintsr)   )r   r   _parse_node_taintr   r   	NodeTaint)r   r   taint_messagesnode_taints
node_tainttaint_objects         r!   _control_plane_node_taintsz7_BareMetalAdminClusterClient._control_plane_node_taints   se    N$ ;R@Ki!'')
++J7lH..>>? * r#   c                    t        |di       }g }|sy|j                         D ]?  \  }}|j                  t        j                  j
                  j                  ||             A t        j                  j                  |      }|S )rc   control_plane_node_labelsNr   r   )r   r   r   r   BareMetalNodePoolConfigre   r   )r   r   node_labelsr    r   r   rg   s          r!   _control_plane_node_labelsz7_BareMetalAdminClusterClient._control_plane_node_labels   s    $ ;R@K#% !'')
U"))

*
*
6
6
I
IU J  * $;;GG9 H   r#   c                    |j                  d      sy|j                  dd      j                  d      }g }|D ]  }|j                  d      }t        |      dk7  r$t        j                  dj                  |            |j                  t        j                  j                  j                  |d   |d	   
              t        j                  j                  |      }|S )ad  Validates and parses a node label object.

    Args:
      node_labels: str of key-val pairs separated by ';' delimiter.

    Returns:
      If label is valid, returns a dict mapping message LabelsValue to its
      value, otherwise, raise ArgumentTypeError.
      For example,
      {
          'key': LABEL_KEY
          'value': LABEL_VALUE
      }
    rf   Nrl   ;=   z8Node Label [{}] not in correct format, expect KEY=VALUE.r      r   r   )rp   splitlenr
   ArgumentTypeErrorformatr   r   rd   re   r   )r   r   input_node_labelsr    labelkey_val_pairrg   s          r!   _parse_node_labelsz/_BareMetalAdminClusterClient._parse_node_labels  s     ??8$#"5;;C@#% "[[%l	\	a	++FMM!
 	

 #))

&
&
2
2
E
Eq/a F  # $77CC9 D   r#   c                     |j                  dd      | j                  |      d}t        |j                               rt	        j
                  di |S y)rj   znode-iprl   rn   Nr)   )rp   r   r*   r+   r   rd   )r   node_config_argsr.   s      r!   _node_configz)_BareMetalAdminClusterClient._node_config:  sQ     #&&y"5))*:;F
 6==?))3F33r#   c                     |j                   rt        |dg       ng }|D cg c]  }| j                  |       c}S c c}w )rv   ry   )ry   r   r   )r   r   node_config_flag_valuenode_configs       r!   %_control_plane_node_configs_from_flagzB_BareMetalAdminClusterClient._control_plane_node_configs_from_flagF  sT     ** 	2B7  ;Q:P;+&:P  s   ;c                    d|j                         v r| j                  |      }n| j                  |      }|| j                  |      | j	                  |      d}t        |j                               rt        j                  di |S y)z1Constructs proto message BareMetalNodePoolConfig.rx   )rw   rf   taintsNr)   )	GetSpecifiedArgsDictr{   r   r   r   r*   r+   r   r   )r   r   node_configsr.   s       r!   _node_pool_configz._BareMetalAdminClusterClient._node_pool_configT  s    -1J1J1LL??El??El $11$711$7F 6==?--777r#   c                     d| j                  |      i}t        |j                               rt        j                  di |S y)zBConstructs proto message BareMetalAdminControlPlaneNodePoolConfig.nodePoolConfigNr)   )r   r*   r+   r   (BareMetalAdminControlPlaneNodePoolConfigr-   s      r!   _control_plane_node_pool_configz<_BareMetalAdminClusterClient._control_plane_node_pool_configf  sB     	$006F 6==?>>HHHr#   c                     g }t        |dd      }|r>|j                         D ]+  \  }}|j                  t        j                  ||             - |S )z9Constructs proto message BareMetalAdminApiServerArgument.api_server_argsN)argumentr   )r   r   r   r   BareMetalAdminApiServerArgument)r   r   r   api_server_args_flag_valuer   vals         r!   _api_server_argsz-_BareMetalAdminClusterClient._api_server_argsq  sW    O!(/@$!G!0668(#s44cM	
 9
 r#   c                     | j                  |      | j                  |      d}t        |j                               rt	        j
                  di |S y)z:Constructs proto message BareMetalAdminControlPlaneConfig.)controlPlaneNodePoolConfigapiServerArgsNr)   )r   r   r*   r+   r    BareMetalAdminControlPlaneConfigr-   s      r!   _control_plane_configz2_BareMetalAdminClusterClient._control_plane_config}  sS     '+&J&J'
 ..t4	F 6==?66@@@r#   c                     t        |dd      t        |dg       d}t        |j                               rt        j                  di |S y)z3Constructs proto message BareMetalAdminProxyConfig.uriNno_proxy)r   noProxyr)   )r   r*   r+   r   BareMetalAdminProxyConfigr-   s      r!   _proxy_configz*_BareMetalAdminClusterClient._proxy_config  sJ     tUD)4R0F
 6==?//9&99r#   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z@Constructs proto message BareMetalAdminClusterOperationsConfig .enableApplicationLogsenable_application_logsNr)   )r   r*   r+   r   %BareMetalAdminClusterOperationsConfigr-   s      r!   _cluster_operations_configz7_BareMetalAdminClusterClient._cluster_operations_config  sA     	 /H$!OF 6==?;;EfEEr#   c                 ~    dt        |dg       i}t        |j                               rt        j                  di |S y)z9Constructs proto message BareMetalAdminMaintenanceConfig.maintenanceAddressCidrBlocksmaintenance_address_cidr_blocksNr)   )r   r*   r+   r   BareMetalAdminMaintenanceConfigr-   s      r!   _maintenance_configz0_BareMetalAdminClusterClient._maintenance_config  sD     	'3R)
F 6==?55???r#   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z:Constructs proto message BareMetalAdminWorkloadNodeConfig.maxPodsPerNodemax_pods_per_nodeNr)   )r   r*   r+   r    BareMetalAdminWorkloadNodeConfigr-   s      r!   _workload_node_configz2_BareMetalAdminClusterClient._workload_node_config  sA     	'$(;TBF 6==?66@@@r#   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z8Constructs proto message BareMetalAdminNodeAccessConfig.	loginUser
login_userrootNr)   )r   r*   r+   r   BareMetalAdminNodeAccessConfigr-   s      r!   _node_access_configz0_BareMetalAdminClusterClient._node_access_config  s@     	WT<8F 6==?44>v>>r#   c                 2   g }t        |dd      }|r$|D cg c]  }t        j                  |       c}S t        j                  j
                  j                  j                         }|r)t        j                  |      }|j                  |       |S yc c}w )z.Constructs repeated proto message ClusterUser.admin_usersN)username)	r   r   ClusterUserr   VALUEScoreaccountGetr   )r   r   cluster_user_messagesr   
admin_usergcloud_config_core_accountdefault_admin_user_messages          r!   _cluster_usersz+_BareMetalAdminClusterClient._cluster_users  s    $t4K ('j 



3'  ",!2!2!7!7!?!?!C!C!E!#+#7#7-$  ""#=>""s   Bc                     d| j                  |      i}t        |j                               rt        j                  di |S y)z'Constructs proto message Authorization.
adminUsersNr)   )r   r*   r+   r   Authorizationr-   s      r!   _authorizationz+_BareMetalAdminClusterClient._authorization  sB     	d))$/F 6==?##-f--r#   c                     d| j                  |      i}t        |j                               rt        j                  di |S y)z6Constructs proto message BareMetalAdminSecurityConfig.authorizationNr)   )r   r*   r+   r   BareMetalAdminSecurityConfigr-   s      r!   _security_configz-_BareMetalAdminClusterClient._security_config  sB     	,,T2F 6==?22<V<<r#   c                 6   | j                  |      t        |dd      | j                  |      t        |dd      | j                  |      | j	                  |      | j                  |      | j                  |      | j                  |      | j                  |      | j                  |      | j                  |      | j                  |      | j                  |      | j                  |      d}t        |j                               rt!        j"                  di |S y)/Constructs proto message BareMetalAdminCluster.descriptionNversion)namer   r   bareMetalVersionnetworkConfigcontrolPlaneloadBalancerstorageproxyclusterOperationsmaintenanceConfig
nodeConfignodeAccessConfigsecurityConfigbinaryAuthorizationr)   )_admin_cluster_namer   r"   r3   r   rH   ra   r   r   r   r   r   r   _binary_authorizationr*   r+   r   r   r-   s      r!   _bare_metal_admin_clusterz6_BareMetalAdminClusterClient._bare_metal_admin_cluster  s     ((.t]D9((.#D)T:--d322482248''-##D)!<<TB!55d;006 44T://5#99$?F$ 6==?++5f55r#   N)&__name__
__module____qualname____doc__r   	Namespacer"   r/   r3   r8   r=   rB   rH   rR   rX   r\   ra   rh   rt   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r#   r!   r   r       s.   G0:: $+<+F+F  	"3"="= 		/99 	0:: 	$5$?$? 	(9(C(C 
/99 

$5$?$? 
*;*E*E 
"3"="= 
 &2$/#--/2->-H-H  ->-H-H  (' R
#--$5$?$? $	2C2M2M 	
#4#>#> 
(9(C(C 
 1 ; ; 
	->-H-H 	&7&A&A 	(9(C(C 		&7&A&A 	!2!<!< *	!2!<!< 		#4#>#> 	,=,G,G r#   r   c                       e Zd ZdZ fdZdej                  fdZdej                  fdZdej                  fdZ	dej                  fdZ
dej                  fdZdej                  fd	Zdej                  fd
Z xZS )AdminClustersClientz6Client for admin clusters in gkeonprem bare metal API.c                 b    t        t        | 
  di | | j                  j                  | _        y )Nr)   )superr   __init___client)projects_locations_bareMetalAdminClusters_service)r   r.   	__class__s     r!   r   zAdminClustersClient.__init__  s'    	
t-77LLJJDMr#   r   c                     | j                  |      | j                  |      d}t        j                  | j	                  |      t        j
                  di |      }| j                  j                  |      S )z1Enrolls an admin cluster to Anthos on bare metal.)
membershipbareMetalAdminClusterId)parent"enrollBareMetalAdminClusterRequestr)   )_admin_cluster_membership_name_admin_cluster_idr   =GkeonpremProjectsLocationsBareMetalAdminClustersEnrollRequest_admin_cluster_parent"EnrollBareMetalAdminClusterRequestr  Enrollr   r   r.   reqs       r!   r  zAdminClustersClient.Enroll  st     99$?#'#9#9$#?F 
P
P))$/+3+V+V ,
,
C ==$$r#   c                     | j                  |      | j                  |d      | j                  |d      | j                  |d      d}t        j                  di |}| j                  j                  |      S )z0Unenrolls an Anthos on bare metal admin cluster.allow_missingvalidate_onlyignore_errors)r   allowMissingvalidateOnlyignoreErrorsr)   )r   GetFlagr   ?GkeonpremProjectsLocationsBareMetalAdminClustersUnenrollRequestr  Unenrollr  s       r!   r  zAdminClustersClient.Unenroll   st     ((.T?;T?;T?;	F 
R
R 
C ==!!#&&r#   c                    |j                   r|j                   n1t        j                  j                  j                   j	                         }dj                  |d      }t        j                  |      }	 | j                  j                  |      }d|j                         vr9t        j                  j                  j                  j	                         sd|_        t        j                   | j#                  |            }t%        j&                  | j                  |dt)        |dd	      t)        |d
d      d      S # t        j                  t        j                  f$ r Y w xY w)z7Lists admin clusters in the GKE On-Prem bare metal API.z'projects/{project}/locations/{location}zus-west1)projectlocation)r  r  -bareMetalAdminClusters	page_sized   limitNpageSize)field
batch_sizer#  batch_size_attribute)r  r   r   r   r   r   r   IGkeonpremProjectsLocationsBareMetalAdminClustersQueryVersionConfigRequestr  QueryVersionConfigapitools_exceptionsHttpUnauthorizedErrorHttpForbiddenErrorr   container_bare_metalr  ;GkeonpremProjectsLocationsBareMetalAdminClustersListRequest_location_namer   YieldFromListr   )r   r   r  r  dummy_request_list_reqs          r!   ListzAdminClustersClient.List-  s?   
 **;*;*@*@*H*H*L*L*N  7==* > F ffM
--
*
*=
9a 	$3355!!66??CCEdm 	LL&&t,	
  ##&4c2dGT*' + 	11..  s   5D; ;#E! E!c                     | j                  |      | j                  |      j                         d}t        j                  di |}| j
                  j                  |      S )z7Query Anthos on bare metal admin version configuration.)upgradeConfig_clusterNamer  r)   )r   _location_refRelativeNamer   r(  r  r)  r  s       r!   r)  z&AdminClustersClient.QueryVersionConfig\  sa     &*%=%=d%C$$T*779F
 
\
\ 
C ==++C00r#   c                     | j                  |      t        |dd      | j                  |      | j                  |      d}t	        j
                  di |}| j                  j                  |      S )z1Creates an admin cluster in Anthos on bare metal.r  F)r  r  bareMetalAdminClusterr  r)   )r  r   r   r  r   =GkeonpremProjectsLocationsBareMetalAdminClustersCreateRequestr  Creater  s       r!   r<  zAdminClustersClient.Createh  su     ,,T2ou=!%!?!?!E#'#9#9$#?	F 	NN 	
	
 
 ==$$r#   c                    | j                  |      t        j                  |t        j                        t	        |dd      | j                  |      d}t        j                  di |}| j                  j                  |      S )z1Updates an admin cluster in Anthos on bare metal.r  F)r   
updateMaskr  r:  r)   )
r   r	   get_update_mask-BARE_METAL_ADMIN_CLUSTER_ARGS_TO_UPDATE_MASKSr   $_bare_metal_admin_cluster_for_updater   <GkeonpremProjectsLocationsBareMetalAdminClustersPatchRequestr  Patchr  s       r!   UpdatezAdminClustersClient.Updatew  s     ((.!11+KK
  ou=!%!J!J"
	F 
O
O 
C ==s##r#   c                    t        |dd      t        |dd      | j                  |      | j                  |      | j                  |      | j	                  |      | j                  |      | j                  |      | j                  |      | j                  |      | j                  |      | j                  |      d}t        |j                               rt        j                  di |S y)r   r   Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r)   )r   r3   r   rH   ra   r   r   r   r   r   r   r*   r+   r   r   r-   s      r!   rA  z8AdminClustersClient._bare_metal_admin_cluster_for_update  s    
 t]D9#D)T:--d322482248''-##D)!<<TB!55d;006 44T:#99$?F 6==?++5f55r#   )r   r   r   r   r   r   r   r  r  r4  r)  r<  rD  rA  __classcell__)r  s   @r!   r   r     s    >K%*44 %',66 '-(22 -^
1%6%@%@ 
1%*44 %$*44 $"#--r#   r   N)r   
__future__r   r   r   apitools.base.pyr   r*  r   *googlecloudsdk.api_lib.container.gkeonpremr   r	   googlecloudsdk.callioper
   r   googlecloudsdk.corer   2googlecloudsdk.generated_clients.apis.gkeonprem.v1r   r   
ClientBaser   r   r)   r#   r!   <module>rN     sS    R &  ' > ' = B / . 5 * `h6#4#4 hVQ6 Qr#   