
                             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 ddlmZ  G d dej,                        Z G d de      Zy)zEUtilities for gkeonprem API clients for Bare Metal cluster resources.    )absolute_import)division)unicode_literals)Optional)
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 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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ej
                  fdZ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*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-Z0dej
                  fd.Z1dej
                  fd/Z2dej
                  fd0Z3dej
                  fd1Z4d2 Z5d3 Z6dej
                  fd4Z7dej
                  fd5Z8dej
                  fd6Z9dej
                  fd7Z:dej
                  fd8Z;dej
                  fd9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>ZAdej
                  fd?ZBdej
                  fd@ZCdA ZDdej
                  fdBZEdej
                  fdCZFdej
                  fdDZGdej
                  fdEZHdej
                  fdFZIdej
                  dGeJeKj                     fdHZMdej
                  fdIZNyJ)K_BareMetalClusterClientz1Base class for GKE OnPrem Bare Metal API clients.argsc                 >    t        |di       }| j                  |      S )z=Constructs proto message AnnotationsValue for create command.annotations)getattr_dict_to_annotations_message)selfr   r   s      Elib/googlecloudsdk/api_lib/container/gkeonprem/bare_metal_clusters.py_create_annotationsz+_BareMetalClusterClient._create_annotations%   s!    $r2K,,[99    c                 b    i | j                  |      |j                  }| j                  |      S )zEConstructs proto message AnnotationsValue for adding new annotations.)_get_current_annotationsadd_annotationsr   )r   r   results      r   _add_annotationsz(_BareMetalClusterClient._add_annotations+   s3    L--d3Lt7K7KLF,,V44r   c                 >    t         j                  j                         S )zCConstructs proto message AnnotationsValue for clearing annotations.)messagesBareMetalClusterAnnotationsValue)r   s    r   _clear_annotationsz*_BareMetalClusterClient._clear_annotations1   s    $$5577r   c                     | j                  |      }|j                         D ci c]  \  }}||j                  vr|| }}}| j                  |      S c c}}w )zCConstructs proto message AnnotationsValue for removing annotations.)r   itemsremove_annotationsr   )r   r   curr_annotationskeyvalueupdated_annotationss         r   _remove_annotationsz+_BareMetalClusterClient._remove_annotations5   sm    44T: +0022JCd--- 	U
2   ,,-@AAs   Ac                 8    | j                  |j                        S )zBConstructs proto message AnnotationsValue for setting annotations.)r   set_annotationsr   r   s     r   _set_annotationsz(_BareMetalClusterClient._set_annotations@   s    ,,T-A-ABBr   c                     |j                   j                  j                         }| j                  |      }i }|j                  r4|j                  j
                  D ]  }|j                  ||j                  <    |S )z+Fetches the standalone cluster annotations.)CONCEPTSclusterParseDescriber   additionalPropertiesr)   r(   )r   r   cluster_refcluster_responser'   
annotations         r   r   z0_BareMetalClusterClient._get_current_annotationsD   sl    --''--/K}}[1##(44II*+5+;+;( J r   c                     |j                         }d|v r| j                  |      S d|v r| j                         S d|v r| j                  |      S d|v r| j	                  |      S y)z=Constructs proto message AnnotationsValue for update command.r   clear_annotationsr&   r-   N)GetSpecifiedArgsDictr   r#   r+   r/   )r   r   specified_argss      r   _update_annotationsz+_BareMetalClusterClient._update_annotationsP   sw    ..0NN*""4((n,$$&&~-%%d++N*""4(( +r   c                     g }|sy|j                         D ]?  \  }}|j                  t        j                  j                  j                  ||             A t        j                  j	                  |      }|S )z9Converts key-val pairs to proto message AnnotationsValue.Nr(   r)   r5   )r%   appendr    r!   r"   AdditionalProperty)r   r   additional_property_messagesr(   r)   annotation_value_messages         r   r   z4_BareMetalClusterClient._dict_to_annotations_message_   s    #% !'')
U"))

#
#
4
4
G
GU H  *  (88II9  J   $#r   c                     |j                   d   dk(  r| j                  |      S |j                   d   dk(  r| j                  |      S y)z*Constructs proto message AnnotationsValue.updatecreateN)command_pathr=   r   r.   s     r   _annotationsz$_BareMetalClusterClient._annotationsq   sM    (%%d++(%%d++r   c                     t        |dg       t        |dg       d}t        |j                               rt        j                  di |S y)z7Constructs proto message BareMetalIslandModeCidrConfig.'island_mode_service_address_cidr_blocks#island_mode_pod_address_cidr_blocks)serviceAddressCidrBlockspodAddressCidrBlocksN )r   anyvaluesr    BareMetalIslandModeCidrConfigr   r   kwargss      r   _island_mode_cidr_configz0_BareMetalClusterClient._island_mode_cidr_config{   sT     %,;R%
 !(7!
	F 6==?33=f==r   c                 v    d| j                  |      i}| j                  |      rt        j                  di |S y )NenabledrP   )sr_iov_config_enabledIsSetr    BareMetalSrIovConfigrT   s      r   _sr_iov_configz&_BareMetalClusterClient._sr_iov_config   s>    4--d3F zz&**4V44r   c                 P    d|j                         v ryd|j                         v ryy )Nenable_sr_iov_configTdisable_sr_iov_configFr;   r.   s     r   rY   z-_BareMetalClusterClient.sr_iov_config_enabled   s-    !:!:!<<	 D$=$=$?	?r   c                 x    d| j                  |d      i}| j                  |      rt        j                  di |S y )NrX   enable_multi_nic_configrP   )GetFlagrZ   r    (BareMetalMultipleNetworkInterfacesConfigrT   s      r   #_multiple_network_interfaces_configz;_BareMetalClusterClient._multiple_network_interfaces_config   sA     	4<<&?@F zz&>>HHHr   c                     | j                  |      | j                  |d      | j                  |      | j                  |      d}| j	                  |      rt        j                  di |S y)z0Constructs proto message BareMetalNetworkConfig.enable_advanced_networking)islandModeCidradvancedNetworkingmultipleNetworkInterfacesConfigsrIovConfigNrP   )rV   rc   re   r\   rZ   r    BareMetalNetworkConfigrT   s      r   _network_configz'_BareMetalClusterClient._network_config   si     77="ll41MN44T:**40F zz&,,6v66r   c                     t        |dd      t        |dd      d}t        |j                               rt        j                  di |S y)z,Constructs proto message BareMetalVipConfig.control_plane_vipNingress_vip)controlPlaneVip
ingressViprP   )r   rQ   rR   r    BareMetalVipConfigrT   s      r   _vip_configz#_BareMetalClusterClient._vip_config   sK     #4)<dCdM48F
 6==?((2622r   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z-Constructs proto message BareMetalPortConfig.controlPlaneLoadBalancerPort control_plane_load_balancer_portNrP   )r   rQ   rR   r    BareMetalPortConfigrT   s      r   _port_configz$_BareMetalClusterClient._port_config   sD     	'4d)
F 6==?))3F33r   c                     |j                   sg S |j                   j                  dg       }|st        j                  dd      g }|D ]"  }|j	                  | j                  |             $ |S )z-Constructs proto message field address_pools.addressPools"--metal_lb_address_pools_from_filez<Missing field [addressPools] in Metal LB address pools file.) metal_lb_address_pools_from_filegetr   BadArgumentExceptionrA   _address_pool)r   r   address_poolsaddress_pool_messagesaddress_pools        r   _address_pools_from_filez0_BareMetalClusterClient._address_pools_from_file   s|    00i99==M ++
.
H 
 %""4#5#5l#CD & ! r   c                 "   |j                  dg       }|st        j                  dd      |j                  dd      }|st        j                  dd      ||j                  dd      |j                  dd      |d	}t        j                  d
i |S )z:Constructs proto message BareMetalLoadBalancerAddressPool.	addressesr|   z9Missing field [addresses] in Metal LB address pools file.poolNz4Missing field [pool] in Metal LB address pools file.avoidBuggyIPsmanualAssignr   avoidBuggyIpsr   r   rP   )r~   r   r   r     BareMetalLoadBalancerAddressPool)r   r   r   r   rU   s        r   r   z%_BareMetalClusterClient._address_pool   s      b1I++
.
E 
 FD)D++
.
@  %))/4@$((>	F 44>v>>r   c                    |j                   sg S g }|j                   D ]j  }|j                  t        j                  |j	                  dg       |j	                  dd       |j	                  dd       |j	                  dd                    l |S )Nr   avoid-buggy-ipsmanual-assignr   r   )metal_lb_address_poolsrA   r    r   r~   r   r   r   r   s       r   _address_pools_from_flagz0_BareMetalClusterClient._address_pools_from_flag   s    &&iM33

3
3$((b9(,,->E'++OTB##FD1	 4 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 /--metal_lb_load_balancer_node_configs_from_filez5Missing field [nodeIP] in Metal LB Node configs file.labelsnodeIpr   rP   r~   r   r   _node_labelsr    BareMetalNodeConfig)r   metal_lb_node_confignode_iprU   s       r   _metal_lb_node_configz-_BareMetalClusterClient._metal_lb_node_config  sn    "&&x4G++
;
A  ##$8$<$<Xr$JK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.nodeConfigsr   z:Missing field [nodeConfigs] in Metal LB Node configs file.)-metal_lb_load_balancer_node_configs_from_filer~   r   r   rA   r   )r   r   metal_lb_node_configsmetal_lb_node_configs_messagesr   s        r    _metal_lb_node_configs_from_filez8_BareMetalClusterClient._metal_lb_node_configs_from_file  s    ==i 	::>>2	
  !++
;
F 
 &(" 5$++

$
$%9
: !6
 *)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
      }
    r   Nr   ;=   z8Node Label [{}] not in correct format, expect KEY=VALUE.r      r?   r@   )r~   splitlenr   ArgumentTypeErrorformatrA   r    r   LabelsValuerB   )r   node_labelsinput_node_labelsrC   labelkey_val_pairlabels_value_messages          r   parse_node_labelsz)_BareMetalClusterClient.parse_node_labels8  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)r   znode-ipr   r   NrP   )r~   r   rQ   rR   r    r   )r   node_config_argsrU   s      r   node_configz#_BareMetalClusterClient.node_configa  sQ     #&&y"5(()9:F
 6==?))3F33r   c                     |j                   rt        |dg       ng }|D cg c]  }| j                  |       c}S c c}w )r   #metal_lb_load_balancer_node_configs)r   r   r   )r   r   node_config_flag_valuer   s       r    _metal_lb_node_configs_from_flagz8_BareMetalClusterClient._metal_lb_node_configs_from_flagm  sT     33 	;R@  :P9O+%9O  s   ;c                     g }t        |di       }|sg S |j                         D ]7  }| j                  |      }|j                  t	        j
                  di |       9 |S )#Constructs proto message NodeTaint."metal_lb_load_balancer_node_taintsrP   r   r%   _parse_node_taintrA   r    	NodeTaintr   r   taint_messagesnode_taints
node_tainttaint_objects         r   _metal_lb_node_taintsz-_BareMetalClusterClient._metal_lb_node_taintsy  se    N$ DbIKi!'')
++J7lH..>>? * r   c                    t        |di       }g }|sy|j                         D ]?  \  }}|j                  t        j                  j
                  j                  ||             A t        j                  j                  |      }|S )%Constructs proto message LabelsValue."metal_lb_load_balancer_node_labelsNr?   r@   r   r%   rA   r    BareMetalNodePoolConfigr   rB   r   r   r   rC   r(   r)   r   s          r   _metal_lb_labelsz(_BareMetalClusterClient._metal_lb_labels  s    $ DbIK#% !'')
U"))

*
*
6
6
I
IU J  * $;;GG9 H   r   c                 2   d|j                         v r| j                  |      }n| j                  |      }|| j                  |      | j	                  |      | j                  |      d}t        |j                               rt        j                  di |S y)1Constructs proto message BareMetalNodePoolConfig.r   r   r   taintskubeletConfigNrP   )
r;   r   r   r   r   _metal_lb_kubelet_configrQ   rR   r    r   )r   r   r   rU   s       r   (_metal_lb_load_balancer_node_pool_configz@_BareMetalClusterClient._metal_lb_load_balancer_node_pool_config  s    
 	8$$&	' #CCDI"CCDI -''-,,T266t<	F 6==?--777r   c                 P    d|j                         v ryd|j                         v ryy )N3enable_metal_lb_load_balancer_serialize_image_pullsF4disable_metal_lb_load_balancer_serialize_image_pullsTr`   r.   s     r   (_metal_lb_serialize_image_pulls_disabledz@_BareMetalClusterClient._metal_lb_serialize_image_pulls_disabled  s9     	>$$&	' >$$&	' r   c                     | j                  |d      | j                  |d      | j                  |      d}| j                  |      rt        j                  di |S y )N%metal_lb_load_balancer_registry_burst(metal_lb_load_balancer_registry_pull_qpsregistryBurstregistryPullQpsserializeImagePullsDisabledrP   )rc   r   rZ   r    BareMetalKubeletConfigrT   s      r   r   z0_BareMetalClusterClient._metal_lb_kubelet_config  sd    9
  <<<
 99$?
F zz&,,6v66r   c                     d| j                  |      i}t        |j                               rt        j                  di |S y)z=Constructs proto message BareMetalLoadBalancerNodePoolConfig.nodePoolConfigNrP   )r   rQ   rR   r    #BareMetalLoadBalancerNodePoolConfigrT   s      r   _metal_lb_node_pool_configz2_BareMetalClusterClient._metal_lb_node_pool_config  sB     	$GGMF 6==?99CFCCr   c                     d|j                         v r| j                  |      }n| j                  |      }|| j                  |      d}t	        |j                               rt        j                  di |S y)z0Constructs proto message BareMetalMetalLbConfig.r}   )r{   loadBalancerNodePoolConfigNrP   )r;   r   r   r   rQ   rR   r    BareMetalMetalLbConfig)r   r   r   rU   s       r   _metal_lb_configz(_BareMetalClusterClient._metal_lb_config  sr    )T-F-F-HH33D9m33D9m%&*&E&Ed&KF
 6==?,,6v66r   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z1Constructs proto message BareMetalManualLbConfig.rX   enable_manual_lbFNrP   )r   rQ   rR   r    BareMetalManualLbConfigrT   s      r   _manual_lb_configz)_BareMetalClusterClient._manual_lb_config  sA     	74!3U;F 6==?--777r   c                    | j                  |      | j                  |      | j                  |      | j                  |      | j	                  |      d}t        |j                               rt        j                  di |S y)z5Constructs proto message BareMetalLoadBalancerConfig.)	vipConfig
portConfigmetalLbConfigmanualLbConfigbgpLbConfigNrP   )	rt   ry   r   r   _bgp_lb_configrQ   rR   r    BareMetalLoadBalancerConfigrT   s      r   _load_balancer_configz-_BareMetalClusterClient._load_balancer_config  sx     %%d+''-..t4006**40F 6==?11;F;;r   c                     | j                  |      | j                  |d      | j                  |      | j                  |      d}t	        |j                               rt        j                  di |S y)z.Constructs proto message BareMetalBgpLbConfig.bgp_asn)r{   asnbgpPeerConfigsr   NrP   )_bgp_address_poolsrc   _bgp_peer_configs#_bgp_load_balancer_node_pool_configrQ   rR   r    BareMetalBgpLbConfigrT   s      r   r   z&_BareMetalClusterClient._bgp_lb_config  sm     //5||D),006&*&N&N'
	F 6==?**4V44r   c                 $   d|j                         vrg S g }|j                  D ]j  }|j                  t        j                  |j                  dg       |j                  dd      |j                  dd      |j                  dd                   l |S )zXConstructs repeated proto message BareMetalBgpLbConfig.BareMetalLoadBalancerAddressPool.bgp_address_poolsr   r   Nr   r   r   )r;   r  rA   r    r   r~   r   s       r   r   z*_BareMetalClusterClient._bgp_address_pools  s    $";";"==iM..

3
3$((b9(,,->E'++OTB##FD1	 / r   c           	         d|j                         vrg S g }| j                  |d      D ][  }t        j                  |j	                  dd      |j	                  dg       |j	                  dd            }|j                  |       ] |S )z9Constructs repeated proto message BareMetalBgpPeerConfig.bgp_peer_configsr   Nzcontrol-plane-nodesip)r   controlPlaneNodes	ipAddress)r;   rc   r    BareMetalBgpPeerConfigr~   rA   )r   r   retpeer_configmsgs        r   r   z)_BareMetalClusterClient._bgp_peer_configs(  s    !:!:!<<i
C||D*<=++ooeT*'OO,A2FOOD$/c
 
jjo > Jr   c                     d| j                  |      i}t        |j                               rt        j                  di |S y)zRConstructs proto message BareMetalBgpLbConfig.BareMetalLoadBalancerNodePoolConfig.r   NrP   )_bgp_node_pool_configrQ   rR   r    r   rT   s      r   r   z;_BareMetalClusterClient._bgp_load_balancer_node_pool_config8  sB    
 	$44T:F 6==?99CFCCr   c                     | j                  |      | j                  |      | j                  |      | j                  |      d}t	        |j                               rt        j                  di |S y)zjConstructs proto message BareMetalBgpLbConfig.BareMetalLoadBalancerNodePoolConfig.BareMetalNodePoolConfig.)r   r   r   r   NrP   )_bgp_load_balancer_node_labels_bgp_load_balancer_node_configs_bgp_load_balancer_node_taints!_bgp_load_balancer_kubelet_configrQ   rR   r    r   rT   s      r   r  z-_BareMetalClusterClient._bgp_node_pool_configD  sj     55d;;;DA55d;??E	F 6==?--777r   c                 P    d|j                         v ryd|j                         v ryy )N/disable_bgp_load_balancer_serialize_image_pullsT.enable_bgp_load_balancer_serialize_image_pullsFr`   r.   s     r   #_bgp_serialize_image_pulls_disabledz;_BareMetalClusterClient._bgp_serialize_image_pulls_disabledP  s9     	:$$&	' 8$$&	' r   c                     | j                  |d      | j                  |d      | j                  |      d}| j                  |      rt        j                  di |S y)zConstructs proto message BareMetalBgpLbConfig.BareMetalLoadBalancerNodePoolConfig.BareMetalNodePoolConfig.BareMetalKubeletConfig. bgp_load_balancer_registry_burst#bgp_load_balancer_registry_pull_qpsr   NrP   )rc   r  rZ   r    r   rT   s      r   r  z9_BareMetalClusterClient._bgp_load_balancer_kubelet_config`  sd    
 d,NO<<7
 (,'O'O(
F zz&,,6v66r   c                     d|j                         vrg S g }| j                  |d      D ]"  }|j                  | j                  |             $ |S )zConstructs repeated proto message BareMetalBgpLbConfig.BareMetalLoadBalancerNodePoolConfig.BareMetalNodePoolConfig.BareMetalNodeConfig.bgp_load_balancer_node_configs)r;   rc   rA   r   )r   r   node_configsr   s       r   r  z7_BareMetalClusterClient._bgp_load_balancer_node_configsq  sU    't/H/H/JJiL||D*JK$**;78 L r   c                 (   d|j                         vryg }|j                  j                         D ]?  \  }}|j                  t        j
                  j                  j                  ||             A t        j
                  j                  |      }|S )zvConstructs proto message BareMetalBgpLbConfig.BareMetalLoadBalancerNodePoolConfig.BareMetalNodePoolConfig.LabelsValue.bgp_load_balancer_node_labelsNr?   r@   )r;   r  r%   rA   r    r   r   rB   )r   r   rC   r(   r)   r   s         r   r  z6_BareMetalClusterClient._bgp_load_balancer_node_labels|  s    &d.G.G.II#% 88>>@
U"))

*
*
6
6
I
IU J  A $;;GG9 H   r   c                     d|j                         vrg S | j                  |di       }g }|j                         D ]7  }| j                  |      }|j	                  t        j                  di |       9 |S )z,Constructs repeated proto message NodeTaint.bgp_load_balancer_node_taintsrP   )r;   rc   r%   r   rA   r    r   )r   r   r   r   r   r   s         r   r  z6_BareMetalClusterClient._bgp_load_balancer_node_taints  sw    &d.G.G.IIi,,t%DbIKN!'')
++J7lH..>>? * 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storageClassrP   r   rQ   rR   r    BareMetalLvpConfigrT   s      r   _lvp_configz#_BareMetalClusterClient._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sharedPathPvCountrP   )r+  r   rQ   rR   r    BareMetalLvpShareConfigrT   s      r   _lvp_share_configz)_BareMetalClusterClient._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)r#  lvp_node_mounts_config_pathN$lvp_node_mounts_config_storage_classr&  rP   r)  rT   s      r   _lvp_node_mounts_configz/_BareMetalClusterClient._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)z0Constructs proto message BareMetalStorageConfig.)lvpShareConfiglvpNodeMountsConfigNrP   )r1  r5  rQ   rR   r    BareMetalStorageConfigrT   s      r   _storage_configz'_BareMetalClusterClient._storage_config  sN     006#;;DAF
 6==?,,6v66r   c                     g }|sy|j                         D ]?  \  }}|j                  t        j                  j                  j                  ||             A t        j                  j	                  |      }|S )r   Nr?   r@   )r%   rA   r    r   r   rB   )r   r   rC   r(   r)   r   s         r   r   z$_BareMetalClusterClient._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 )r   r   r   &--control_plane_node_configs_from_filez:Missing field [nodeIP] in Control Plane Node configs file.r   r   rP   r   )r   control_plane_node_configr   rU   s       r   _control_plane_node_configz2_BareMetalClusterClient._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 )r   r   r=  z?Missing field [nodeConfigs] in Control Plane Node configs file.)$control_plane_node_configs_from_filer~   r   r   rA   r?  )r   r   control_plane_node_configs#control_plane_node_configs_messagesr>  s        r   %_control_plane_node_configs_from_filez=_BareMetalClusterClient._control_plane_node_configs_from_file  s     44i!%!J!J!N!Nr" &++
2
K 
 +-'%?!)00

)
)*C
D &@
 /.r   c                 v    g }t        |dd      }|r'|D ]"  }|j                  | j                  |             $ |S )r   rB  N)r   rA   r   )r   r   r  r   r   s        r   %_control_plane_node_configs_from_flagz=_BareMetalClusterClient._control_plane_node_configs_from_flag  sG     L$T+GN/+D,,[9: 0 r   c                     g }t        |di       }|sg S |j                         D ]7  }| j                  |      }|j                  t	        j
                  di |       9 |S )r   control_plane_node_taintsrP   r   r   s         r   _control_plane_node_taintsz2_BareMetalClusterClient._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 )r   control_plane_node_labelsNr?   r@   r   r   s          r   _control_plane_node_labelsz2_BareMetalClusterClient._control_plane_node_labels%  s    $ ;R@K#% !'')
U"))

*
*
6
6
I
IU J  * $;;GG9 H   r   c                 2   d|j                         v r| j                  |      }n| j                  |      }|| j                  |      | j	                  |      | j                  |      d}t        |j                               rt        j                  di |S y)r   rA  r   NrP   )
r;   rD  rF  rL  rI  _control_plane_kubelet_configrQ   rR   r    r   )r   r   r  rU   s       r   _node_pool_configz)_BareMetalClusterClient._node_pool_config9  s    -1J1J1LL??El??El $11$711$7;;DA	F 6==?--777r   c                 P    d|j                         v ryd|j                         v ryy )N+disable_control_plane_serialize_image_pullsT*enable_control_plane_serialize_image_pullsFr`   r.   s     r   -_control_plane_serialize_image_pulls_disabledzE_BareMetalClusterClient._control_plane_serialize_image_pulls_disabledL  s9     	6$$&	' 4$$&	' r   c                     | j                  |d      | j                  |d      | j                  |      d}| j                  |      rt        j                  di |S y )Ncontrol_plane_registry_pull_qpscontrol_plane_registry_burst)r   r   r   rP   )rc   rS  rZ   r    r   rT   s      r   rN  z5_BareMetalClusterClient._control_plane_kubelet_config\  s_    <<3
 d,JK>>tDF zz&,,6v66r   c                     d| j                  |      i}t        |j                               rt        j                  di |S y)z=Constructs proto message BareMetalControlPlaneNodePoolConfig.r   NrP   )rO  rQ   rR   r    #BareMetalControlPlaneNodePoolConfigrT   s      r   _control_plane_node_pool_configz7_BareMetalClusterClient._control_plane_node_pool_configj  sB     	$006F 6==?99CFCCr   c                     g }t        |dd      }|r>|j                         D ]+  \  }}|j                  t        j                  ||             - |S )z4Constructs proto message BareMetalApiServerArgument.api_server_argsN)argumentr)   )r   r%   rA   r    BareMetalApiServerArgument)r   r   r[  api_server_args_flag_valuer(   vals         r   _api_server_argsz(_BareMetalClusterClient._api_server_argsu  sW    O!(/@$!G!0668(#s//CH	
 9
 r   c                     | j                  |      | j                  |      d}t        |j                               rt	        j
                  di |S y)z5Constructs proto message BareMetalControlPlaneConfig.)controlPlaneNodePoolConfigapiServerArgsNrP   )rY  r`  rQ   rR   r    BareMetalControlPlaneConfigrT   s      r   _control_plane_configz-_BareMetalClusterClient._control_plane_config  sS     '+&J&J'
 ..t4	F 6==?11;F;;r   c                     t        |dd      t        |dg       d}t        |j                               rt        j                  di |S y)z.Constructs proto message BareMetalProxyConfig.uriNno_proxy)rg  noProxyrP   )r   rQ   rR   r    BareMetalProxyConfigrT   s      r   _proxy_configz%_BareMetalClusterClient._proxy_config  sJ     tUD)4R0F
 6==?**4V44r   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z:Constructs proto message BareMetalClusterOperationsConfig.enableApplicationLogsenable_application_logsNrP   )r   rQ   rR   r     BareMetalClusterOperationsConfigrT   s      r   _cluster_operations_configz2_BareMetalClusterClient._cluster_operations_config  sA     	 /H$!OF 6==?66@@@r   c                 ~    dt        |dg       i}t        |j                               rt        j                  di |S y)z4Constructs proto message BareMetalMaintenanceConfig.maintenanceAddressCidrBlocksmaintenance_address_cidr_blocksNrP   )r   rQ   rR   r    BareMetalMaintenanceConfigrT   s      r   _maintenance_configz+_BareMetalClusterClient._maintenance_config  sD     	'3R)
F 6==?00:6::r   c                 x    |yt         j                  j                  }|j                  |j                  d}||   S )zUConstructs proto message BareMetalWorkloadNodeConfig.ContainerRuntimeValueValuesEnum.N)ContainerRuntimeUnspecified
Conatinerd)r    BareMetalWorkloadNodeConfigContainerRuntimeValueValuesEnumCONTAINER_RUNTIME_UNSPECIFIED
CONTAINERD)r   container_runtimecontainer_runtime_enumcontainer_runtime_mappings       r   _container_runtimez*_BareMetalClusterClient._container_runtime  sK      	,,LL 
 #@@,77	! %%677r   c                     t        |dd      }| j                  |      t        |dd      d}t        |j                               rt	        j
                  di |S y)z5Constructs proto message BareMetalWorkloadNodeConfig.r}  Nmax_pods_per_node)containerRuntimemaxPodsPerNoderP   )r   r  rQ   rR   r    ry  )r   r   r}  rU   s       r   _workload_node_configz-_BareMetalClusterClient._workload_node_config  s\    &94@ 334EF!$(;TBF
 6==?11;F;;r   c                 T   g }t        |dd      }|r$|D cg c]  }t        j                  |       c}S |j                  d   dk(  ryt        j
                  j                  j                  j                         }|r't        j                  |      }|j                  |      S yc c}w )z.Constructs repeated proto message ClusterUser.admin_usersN)usernamerF   rG   )
r   r    ClusterUserrI   r   VALUEScoreaccountGetrA   )r   r   cluster_user_messagesr  
admin_usergcloud_config_core_accountdefault_admin_user_messages          r   _cluster_usersz&_BareMetalClusterClient._cluster_users  s    $t4K ('j 



3'  ( ",!2!2!7!7!?!?!C!C!E!#+#7#7-$  #))*DEE#s   B%c                     d| j                  |      i}t        |j                               rt        j                  di |S y)z'Constructs proto message Authorization.
adminUsersNrP   )r  rQ   rR   r    AuthorizationrT   s      r   _authorizationz&_BareMetalClusterClient._authorization  sB     	d))$/F 6==?##-f--r   c                     d| j                  |      i}t        |j                               rt        j                  di |S y)z1Constructs proto message BareMetalSecurityConfig.authorizationNrP   )r  rQ   rR   r    BareMetalSecurityConfigrT   s      r   _security_configz(_BareMetalClusterClient._security_config  sB     	,,T2F 6==?--777r   c                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z3Constructs proto message BareMetalNodeAccessConfig.	loginUser
login_userrootNrP   )r   rQ   rR   r    BareMetalNodeAccessConfigrT   s      r   _node_access_configz+_BareMetalClusterClient._node_access_config   s@     	WT<8F 6==?//9&99r   returnc                 ~    dt        |dd      i}t        |j                               rt        j                  di |S y)z7Constructs proto message BareMetalClusterUpgradePolicy.controlPlaneOnlyupgrade_control_planeNrP   )r   rQ   rR   r    BareMetalClusterUpgradePolicyrT   s      r   _upgrade_policyz'_BareMetalClusterClient._upgrade_policy  sA    
 	GD*A4HF 6==?33=f==r   c                    i d| j                  |      d| j                  |      dt        |dd      d| j                  |      dt        |dd      d| j	                  |      d	| j                  |      d
| j                  |      d| j                  |      d| j                  |      d| j                  |      d| j                  |      d| j                  |      d| j                  |      d| j                  |      d| j                  |      d| j                  |      }t!        |j#                               rt%        j&                  di |S y)z,Constructs proto message Bare Metal Cluster.nameadminClusterMembershipdescriptionNr   bareMetalVersionversionnetworkConfigcontrolPlaneloadBalancerstorageproxyclusterOperationsmaintenanceConfig
nodeConfigsecurityConfignodeAccessConfigbinaryAuthorizationupgradePolicyrP   )_user_cluster_name_admin_cluster_membership_namer   rJ   rm   re  r   r:  rk  rp  ru  r  r  r  _binary_authorizationr  rQ   rR   r    r!   rT   s      r   _bare_metal_user_clusterz0_BareMetalClusterClient._bare_metal_user_cluster  s   ''- $"E"Ed"K 	wt]D9 	t((.	
 	GD)T: 	--d3 	2248 	2248 	4''- 	##D) 	T<<TB 	T55d; 	d006 	$//5 	D44T:  	t99$?!" 	--d3#F( 6==?&&000r   N)O__name__
__module____qualname____doc__r   	Namespacer   r   r#   r+   r/   r   r=   r   rJ   rV   r\   rY   re   rm   rt   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r+  r1  r5  r:  r   r?  rD  rF  rI  rL  rO  rS  rN  rY  r`  re  rk  rp  ru  r  r  r  r  r  r  r   r    r  r  r  rP   r   r   r   r   "   s   9:&7&A&A :5#4#>#> 58	B&7&A&A 	BC#4#>#> C
+<+F+F 
)&7&A&A )$$0:: +<+F+F  !2!<!< (9(C(C #--"3"="=  
/99 
0:: !+<+F+F !*?2+<+F+F "2 *3D3N3N *2' R

3D3N3N 
(9(C(C  #4#>#>  *#--.#-- +<+F+F  	->-H-H 	#4#>#>  	$5$?$? 	(9(C(C !2!<!< %6%@%@ $$5$?$?  
#--

(9(C(C 
#-- #--"	2C2M2M 	 1B1L1L  &1B1L1L 
/99 

$5$?$? 
*;*E*E 
"3"="= 
 &2$/#--/2
#--
->-H-H  ->-H-H  ($5$?$? &#-- 0A0K0K 	2C2M2M 	
#4#>#> 
(9(C(C 
 1 ; ; 
	->-H-H 	&7&A&A 8"(9(C(C !2!<!< 0	!2!<!< 		#4#>#> 		&7&A&A 	#--667+<+F+F r   r   c                   H    e Zd ZdZ fdZdej                  f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 xZS )ClustersClientz0Client for clusters in gkeonprem bare metal API.c                 b    t        t        | 
  di | | j                  j                  | _        y )NrP   )superr  __init___client$projects_locations_bareMetalClusters_service)r   rU   	__class__s     r   r  zClustersClient.__init__7  s&    	.$(262LLEEDMr   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)z1Lists Clusters in the GKE On-Prem Bare Metal API.z'projects/{project}/locations/{location}zus-west1)projectlocation)parentr  -bareMetalClusters	page_sized   limitNpageSize)field
batch_sizer  batch_size_attribute)r  r   r  r  r  r   r    DGkeonpremProjectsLocationsBareMetalClustersQueryVersionConfigRequestr  QueryVersionConfigapitools_exceptionsHttpUnauthorizedErrorHttpForbiddenErrorr;   container_bare_metalr  6GkeonpremProjectsLocationsBareMetalClustersListRequest_location_namer   YieldFromListr   )r   r   r  r  dummy_request_list_reqs          r   ListzClustersClient.List;  s:   
 **;*;*@*@*H*H*L*L*N  7==* > F aaM
--
*
*=
9a 	$3355!!66??CCEdmNN""4(H ##!4c2dGT*' ' 	11..  s   5D; ;#E! E!c                     t        j                  |j                               }| j                  j	                  |      S )z3Gets a GKE On-Prem Bare Metal API cluster resource.)r  )r    5GkeonpremProjectsLocationsBareMetalClustersGetRequestRelativeNamer  r  )r   resource_refreqs      r   r4   zClustersClient.Describeh  s5    

H
H&&(C ==S!!r   c                    | j                  |      | j                  |      t        |dd      d}t        j                  di |}t        j
                  | j                  |      |      }| j                  j                  |      S )z'Enrolls a bare metal cluster to Anthos.
local_nameN)r  bareMetalClusterId	localName)r  enrollBareMetalClusterRequestrP   )	r  _user_cluster_idr   r    EnrollBareMetalClusterRequest8GkeonpremProjectsLocationsBareMetalClustersEnrollRequest_user_cluster_parentr  Enroll)r   r   rU   !enroll_bare_metal_cluster_requestr  s        r   r  zClustersClient.Enrollp  s     #'"E"Ed"K"33D9T<6F
 )1(N(N )
)% 
K
K((.&GC
 ==$$r   c                     | j                  |      | j                  |      | j                  |      j                         d}t	        j
                  di |}| j                  j                  |      S )z1Query Anthos on bare metal version configuration.)#createConfig_adminClusterMembershipupgradeConfig_clusterNamer  rP   )r  r  _location_refr  r    r  r  r  r   r   rU   r  s       r   r  z!ClustersClient.QueryVersionConfig  so     //5%)%<%<T%B$$T*779F 
W
W 
C ==++C00r   c                     | j                  |      t        |dd      t        |dd      d}t        j                  di |}| j                  j                  |      S )z*Unenrolls an Anthos cluster on bare metal.forceNallow_missing)r  r  allowMissingrP   )r  r   r    :GkeonpremProjectsLocationsBareMetalClustersUnenrollRequestr  Unenrollr  s       r   r  zClustersClient.Unenroll  sb     ''-w-ot<F
 
M
M 
C ==!!#&&r   c                     | j                  |      t        |dd      t        |dd      t        |dd      | j                  |d      d}t        j                  di |}| j
                  j                  |      S )z(Deletes an Anthos cluster on bare metal.r  Fvalidate_onlyr  ignore_errors)r  r  validateOnlyr  ignoreErrorsrP   )r  r   rc   r    8GkeonpremProjectsLocationsBareMetalClustersDeleteRequestr  Deleter  s       r   r  zClustersClient.Delete  s|     ''-ou=ou=w.T?;F 
K
K 
C ==$$r   c                     | j                  |      t        |dd      | j                  |      | j                  |      d}t	        j
                  di |}| j                  j                  |      S )(Creates an Anthos cluster on bare metal.r  Fr  r  bareMetalClusterr  rP   )r  r   r  r  r    8GkeonpremProjectsLocationsBareMetalClustersCreateRequestr  Creater  s       r   r  zClustersClient.Create  sr     ++D1ou= 99$?"33D9	F 
K
K 
C ==$$r   c                 2   | j                  |      | j                  |d      t        j                  |t        j                        | j                  |d      | j                  |      d}t        j                  di |}| j                  j                  |      S )z(Updates an Anthos cluster on bare metal.r  r  r  r  
updateMaskr  r
  rP   )
r  rc   r
   get_update_mask'BARE_METAL_CLUSTER_ARGS_TO_UPDATE_MASKSr  r    7GkeonpremProjectsLocationsBareMetalClustersPatchRequestr  Patchr  s       r   UpdatezClustersClient.Update  s     ''-T?;!11+EE
 T?; 99$?F 
J
J 
C ==s##r   c                     |j                         j                         | j                  |d      ||j                         d}t	        j
                  di |}| j                  j                  |      S )r  r  r	  rP   )Parentr  rc   Namer    r  r  r  )r   r   bare_metal_clusterbare_metal_cluster_refrU   r  s         r   CreateFromImportzClustersClient.CreateFromImport  sn     )//1>>@T?;.499;	F 
K
K 
C ==$$r   c                     g d}| j                  |      | j                  |d      dj                  |      | j                  |d      |d}t        j                  di |}| j
                  j                  |      S )N)r  bare_metal_versionr   network_configcontrol_planeload_balancerr  r  cluster_operationsmaintenance_configr   security_confignode_access_configos_environment_configr  ,r  r  rP   )r  rc   joinr    r  r  r  )r   r   r  top_level_mutable_fieldsrU   r  s         r   UpdateFromFilezClustersClient.UpdateFromFile  s~    
 " ''-T?;hh78T?;.F 
J
J 
C ==s##r   )r  r  r  r  r  r   r  r  r4   r  r  r  r  r  r  r  r(  __classcell__)r  s   @r   r  r  4  s    8F+(22 +Z"%*44 %"1%6%@%@ 1',66 '%*44 %%*44 %$*44 $"%''%$$#--$r   r  N)r  
__future__r   r   r   typingr   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  rP   r   r   <module>r2     sV    L &  '  > ' = B / . 5 * `Of// Od H$, H$r   