
    &`i1                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZmZmZ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mZmZmZm Z m!Z!  e j"        e#          Z$dZ%dZ& G d de          Z'dS )    N)defaultdict)AnyDictListOptional)PENDINGRUNNINGSTOPPEDSTOPPINGbootstrap_aliyun)	AcsClient)
cli_logger)BOTO_MAX_RETRIES)LogTimer)NodeProvider)TAG_RAY_CLUSTER_NAMETAG_RAY_LAUNCH_CONFIGTAG_RAY_NODE_KINDTAG_RAY_NODE_NAMETAG_RAY_NODE_STATUSTAG_RAY_USER_NODE_TYPE   c                   r   e Zd Zd Zdeeef         dee         fdZdedefdZ	dedefdZ
dedeeef         fdZdedefd	Zdedefd
Zdedeeef         ddfdZd Zd Zdeeef         deeef         dedeeeef                  fdZdeddfdZdee         ddfdZd Zd Zed             ZdS )AliyunNodeProviderc                 z   t          j        | ||           |                    dd          | _        t	          |d         |d         |d         t
                    | _        t          j        dd          | _	        i | _
        t          t                    | _        d| _        t          j                    | _        | j                                         t          j                    | _        | j                                         t          j                    | _        t          j                    | _        i | _        d S )	Ncache_stopped_nodesT
access_keyaccess_key_secretregion)r   r   	region_idmax_retriesr   d   )r   __init__getr   r   r   acsrandomrandint
subnet_idx	tag_cacher   dicttag_cache_pendingbatch_thread_count	threadingEventbatch_update_donesetready_for_new_batchLocktag_cache_lock
count_lockcached_nodes)selfprovider_configcluster_names      /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/autoscaler/_private/aliyun/node_provider.pyr#   zAliyunNodeProvider.__init__$   s   dO\BBB#2#6#67Ld#S#S &|4-.AB%h/(	
 
 
 !.C00 !,T!2!2"#!*!2!2""$$$#,?#4#4  $$&&&'n..#.**     tag_filtersreturnc                    t           | j        dg}|                                D ]\  }}|                    ||d           | j                            |          }g }|D ]}|                    d          t          k    s|                    d          t          k    rE|                    |                    d                     || j	        |                    d          <   |S )NKeyValuetagsStatus
InstanceId)
r   r8   itemsappendr%   describe_instancesr$   r	   r   r5   )r6   r;   rB   kv	instancesnon_terminated_instanceinstances           r9   non_terminated_nodesz'AliyunNodeProvider.non_terminated_nodesB   s    ,* 
  %%'' 	 	DAqKK     H//T/::	"$! 	I 	IH||H%%00HLL4J4Jg4U4U'..x||L/I/IJJJ@H!(,,|"<"<=&&r:   node_idc                     | j                             |g          }|!|d         }|                    d          dk    S t          j        d|           dS )Ninstance_idsr   rC   RunningInvalid node id: %sF)r%   rG   r$   r   errorr6   rN   rJ   rL   s       r9   
is_runningzAliyunNodeProvider.is_runningY   s[    H//gY/GG	  |H<<))Y66.888ur:   c                     | j                             |g          }|6t          |          dk    sJ |d         }|                    d          dk    S t	          j        d|           dS )NrP   r   r   rC   StoppedrS   F)r%   rG   lenr$   r   rT   rU   s       r9   is_terminatedz AliyunNodeProvider.is_terminateda   sr    H//gY/GG	 y>>Q&&&& |H<<))Y66.888ur:   c                    | j                             |g          }|t          |          dk    sJ |d         }|                    d          ft	                      }|                    d                              d          D ]-}|                    d          ||                    d          <   .|S t	                      S )NrP   r   r   TagsTagTagValueTagKey)r%   rG   rY   r$   r*   )r6   rN   rJ   rL   	node_tagstags         r9   r`   zAliyunNodeProvider.node_tagsj   s    H//gY/GG	 y>>Q&&&& |H||F##/ FF	#<<//33E:: G GC3677:3F3FIcggh//00  vvr:   c                    	 | j                             |g          }|t          |          sJ |d         }|                    d          |                    d                              d          gt          |                    d                              d                    dk    r.|                    d                              d          d         S t	          j        d|z             t          j        t                     )NTrP   r   PublicIpAddress	IpAddressz*PublicIpAddress attribute is not exist. %s	r%   rG   rY   r$   r   rT   timesleepSTOPPING_NODE_DELAYrU   s       r9   external_ipzAliyunNodeProvider.external_ipv   s    	,33'3KKI$9~~%%~$Q<LL!233? %677;;KHHT8<<(9::>>{KKLLqPP'||,=>>BB;OOPQRRIHTUUUJ*+++	,r:   c                 t   	 | j                             |g          }|t          |          dk    sJ |d         }|                    d          |                    d                              d          	 t          |                    d                              d                              d                    dk    rA|                    d                              d                              d          d         S t	          j        d|z             t          j        t                     8)	NTrP   r   r   VpcAttributesPrivateIpAddressrd   z)InnerIpAddress attribute is not exist. %sre   rU   s       r9   internal_ipzAliyunNodeProvider.internal_ip   s,   	,33'3KKI$9~~****$Q<LL11= _5599:LMM  _55/00[)) 
   !_55/00[))!-
 H8STTTJ*+++-	,r:   rB   Nc                 6   d}| j         5  | j        sMd}| j                                         | j                                         | j                                         | j        |                             |           d d d            n# 1 swxY w Y   |ret          j        t                     | j         5  | 
                                 | j                                         d d d            n# 1 swxY w Y   | j        5  | xj        dz  c_        d d d            n# 1 swxY w Y   | j                                         | j        5  | xj        dz  c_        | j        dk    r| j                                         d d d            d S # 1 swxY w Y   d S )NFTr   r   )r3   r+   r1   waitclearr/   updaterf   rg   TAG_BATCH_DELAY_update_node_tagsr0   r4   r,   )r6   rN   rB   is_batching_threads       r9   set_node_tagsz AliyunNodeProvider.set_node_tags   s   "  	9 	9) /%)"(--///(..000&,,..."7+224888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9  	-J'''$ - -&&(((&**,,,- - - - - - - - - - - - - - - _ 	) 	)##q(##	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)##%%%_ 	/ 	/##q(##&!++(,,...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/sH   A5BBB8.C22C69C6D!!D%(D%5FFFc                 @   t          t                    }| j                                        D ]A\  }}|                                D ]}||                             |           || j        |<   Bt          t                    | _        |                     |           d S N)r   listr+   rE   rF   r)   r*   _create_tags)r6   batch_updatesrN   rB   xs        r9   rs   z$AliyunNodeProvider._update_node_tags   s    #D))!399;; 	+ 	+MGTZZ\\ 1 1a ''0000&*DN7##!,T!2!2-(((((r:   c                 :   |                                 D ]\  \  }}}d                    |||          }t          d                    |                    5  |t          k    rd}| j                            |||dg           d d d            n# 1 swxY w Y   d S )NzSet tag {}={} on {}zAliyunNodeProvider: {}Namer>   )rE   formatr   r   r%   tag_resource)r6   rz   rH   rI   node_idsms         r9   ry   zAliyunNodeProvider._create_tags   s    - 3 3 5 5 	J 	JFQH%,,Q8<<A299!<<== J J)))A%%hQ1G1G0HIII	J J J J J J J J J J J J J J J	J 	Js   -BB	B	node_configcountc           
      P   t           | j        dt          |t                   dt          |t                   dt          |t                   dt
          |t
                   dg}i }| j        r| j                            |          }|rt          j
        d          5  g }|D ]}|                    d          }	|                    d          }
|
t          k    r|
t          k    rD|
t          k    r| j                            |	g          d                             d          t          k    rnt          j        d|	z             t!          j        t$                     | j                            |	g          d                             d          t          k    n|                    |	           |||                    d          <   | j                            |	           |                    d	          | j        |	<   |                     |	|           t/          |          |k    r nd d d            n# 1 swxY w Y   |t/          |          z  }i }|dk    r|                    t0          |t0                   d           | j                            |d
         |d         ||| j        d         | j        d         | j        d                   }| j                            |          }||D ]}|||                    d          <   |}|                    |           |S )Nr>   rA   zStopping instances to reuserD   rC   rP   r   zwait for %s stopr\   InstanceTypeImageIdv_switch_idsecurity_group_idkey_name)instance_typeimage_idrB   amount
vswitch_idr   key_pair_name)r   r8   r   r   r   r   r   r%   rG   r   groupr$   r   r
   logginginforf   rg   rh   rF   start_instancer)   ru   rY   r   run_instancesr7   rq   )r6   r   rB   r   filter_tagsreused_nodes_dictreuse_nodes_candidatereuse_node_idsnoderN   statuscreated_nodes_dictinstance_id_setsrJ   rL   all_created_nodess                   r9   create_nodezAliyunNodeProvider.create_node   s   
 ,*  &5F0GHH*T:P5QRR)D9N4OPP%5F0GHH	
 # 	-$(H$?$?[$?$Q$Q!$ -%&CDD " "%'N 5 " ""&((<"8"8!%(!3!3!X--&G2C2C$!X-- !% ; ;' ; S S$%!""%#h--#+!, !,
 !(-?'-I J J J $
+> ? ? ? !% ; ;' ; S S$%!""%#h--#+!, !, '--g666DH)$((<*@*@A//88826((62B2Bw/**7D999~..%77!E 8/" " " " " " " " " " " " " " "2 ^,,,199+d;N6OPP    $x55).9$Y/ />"&"67J"K"2:>  6     33AQ3RRI$ ) N NHEM&x||L'A'ABB-  !3444  s   FH::H>H>c                    t                               d|z             | j        rIt                               d                              |           | j                            |           d S | j                            |           d S )Nzterminate node: %sz{Stopping instance {} (to terminate instead, set `cache_stopped_nodes: False` under `provider` in the cluster configuration))loggerr   r   r~   r%   stop_instancedelete_instancer6   rN   s     r9   terminate_nodez!AliyunNodeProvider.terminate_node  s    (72333# 	.KKA  fWoooH""7+++++H$$W-----r:   r   c                     |sd S | j         rIt                              d                    |                     | j                            |           d S | j                            |           d S )Nz|Stopping instances {} (to terminate instead, set `cache_stopped_nodes: False` under `provider` in the cluster configuration))r   r   r   r~   r%   stop_instancesdelete_instances)r6   r   s     r9   terminate_nodesz"AliyunNodeProvider.terminate_nodes  s}     	F# 		0KKAAGAQAQ   H##H-----H%%h/////r:   c                     |                      i            || j        v r| j        |         S | j                            |g          }t	          |          dk    sJ d                    |                      |d         S )z7Refresh and get info for this node, updating the cache.rP   r   zInvalid instance id {}r   )rM   r5   r%   rG   rY   r~   )r6   rN   matchess      r9   	_get_nodezAliyunNodeProvider._get_node-  s    !!"%%%d'''$W-- (--G9-EE7||q   ":"A"A'"J"J   qzr:   c                 X    || j         v r| j         |         S |                     |          S )z>Return node info from cache if possible, otherwise fetches it.)r5   r   r   s     r9   _get_cached_nodez#AliyunNodeProvider._get_cached_node;  s0    d'''$W--~~g&&&r:   c                      t          |           S rw   )r   )cluster_configs    r9   bootstrap_configz#AliyunNodeProvider.bootstrap_configB  s    ///r:   )__name__
__module____qualname__r#   r   strr   rM   boolrV   rZ   r`   ri   rm   ru   rs   ry   r   intr   r   r   r   r   r   staticmethodr    r:   r9   r   r   #   s0         <'S#X '49 ' ' ' '.# $    S T    
 
c3h 
 
 
 
,3 ,3 , , , ,,3 ,3 , , , ,2/S /S#X /4 / / / /4
) 
) 
)J J JC!S>C!15c3hC!HKC!	$sCx.	!C! C! C! C!J
.c 
.d 
. 
. 
. 
.0S	 0d 0 0 0 0  ' ' ' 0 0 \0 0 0r:   r   )(r   r&   r-   rf   collectionsr   typingr   r   r   r   %ray.autoscaler._private.aliyun.configr   r	   r
   r   r   $ray.autoscaler._private.aliyun.utilsr   "ray.autoscaler._private.cli_loggerr   !ray.autoscaler._private.constantsr   !ray.autoscaler._private.log_timerr   ray.autoscaler.node_providerr   ray.autoscaler.tagsr   r   r   r   r   r   	getLoggerr   r   rr   rh   r   r   r:   r9   <module>r      s          # # # # # # , , , , , , , , , , , ,              ; : : : : : 9 9 9 9 9 9 > > > > > > 6 6 6 6 6 6 5 5 5 5 5 5                
	8	$	$ a0 a0 a0 a0 a0 a0 a0 a0 a0 a0r:   