MOON
Server: Apache
System: Linux vps.erhabenn.com.br 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64
User: sonne (1011)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyc
�
d�bc@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
ddlmZddlmZddljjZddljjZddljjjZddljjZddlmZmZmZm Z ddl!m"Z"ddl#m$Z$m%Z%ddl&m'Z'dd	l(m)Z)m*Z*m+Z+m,Z,m-Z-dd
l.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8ddl9m:Z:m;Z;ddl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEdd
lFmGZGddlHmIZIddlJmKZKddlmLZLmMZMmNZNmOZOmPZPdZQdZReQdeRZSejTeSdejU�ZVdZWddddgZXejTeQejU�ZYejTeSdejU�ZZdZ[dZ\dZ]dZ^dd Z_d Z`d!d Zad"Zbd#ZcdZdd$Zed%effd&��YZgd'effd(��YZhehjiehjjgZkd)effd*��YZld+�Zmd,�Znd-�Zod.�Zpd/�Zqd0�Zrd1effd2��YZsd3effd4��YZtd5�Zuevewd6�Zxd7effd8��YZyd9effd:��YZzd;effd<��YZ{d=effd>��YZ|d?effd@��YZ}dAe0fdB��YZ~dS(Ci����N(tLooseVersion(tdefaultdict(tpartial(t0get_agent_supported_features_list_for_extensionstSupportedFeatureNamestget_supported_feature_by_namet)get_agent_supported_features_list_for_crp(tCGroupConfigurator(tget_propertiestset_properties(t
ErrorState(t	add_eventtelapsed_millisecondstWALAEventOperationtadd_periodictEVENTS_DIRECTORY(
tExtensionDownloadErrortExtensionErrortExtensionErrorCodestExtensionOperationErrortExtensionUpdateErrort
ProtocolErrortProtocolNotFoundErrortExtensionsGoalStateErrortGoalStateAggregateStatusCodestMultiConfigExtensionEnableError(tustrtis_file_not_found_error(	tExtensionStatustExtensionSubStatust	ExtensiontExtHandlerStatustVMStatustGoalStateAggregateStatustExtensionStatetExtensionRequestedStatetExtensionSettings(ttextutil(tARCHIVE_DIRECTORY_NAME(tFlexibleVersion(t
AGENT_NAMEtCURRENT_VERSIONtPY_VERSION_MAJORtPY_VERSION_MICROtPY_VERSION_MINORs^([^-]+)s(\d+(?:\.\d+)*)t-s\.zip$iZtReadytNotReadyt
InstallingtUnresponsivet$s.zipswaagent_status.{0}.jsonitNOT_RUNi�ii
u ... [TRUNCATED]it0tExtHandlerStatusValuecBseZdZdZdZRS(s)
    Statuses for Extension Handlers
    R.R/(t__name__t
__module__t__doc__treadyt	not_ready(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR5]stExtensionStatusValuecBs8eZdZdZdZdZdZddddgZRS(s!
    Statuses for Extensions
    t
transitioningtwarningterrortsuccess(R6R7R8R<R=R>R?tSTRINGS(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR;estExtCommandEnvVariablecBs�eZdZdje�Zdje�Zdje�Zdje�Zdje�ZdZ	dZ
dje�Zd	je�Zd
je�Z
RS(tAZURE_GUEST_AGENTs{0}_DISABLE_CMD_EXIT_CODEs.{0}_DISABLE_CMD_EXIT_CODES_MULTIPLE_EXTENSIONSs{0}_UNINSTALL_CMD_EXIT_CODEs{0}_EXTENSION_PATHs{0}_EXTENSION_VERSIONtConfigSequenceNumbertConfigExtensionNames{0}_UPDATING_FROM_VERSIONs{0}_WIRE_PROTOCOL_ADDRESSs {0}_EXTENSION_SUPPORTED_FEATURES(R6R7tPrefixtformattDisableReturnCodet#DisableReturnCodeMultipleExtensionstUninstallReturnCodet
ExtensionPathtExtensionVersiontExtensionSeqNumbert
ExtensionNametUpdatingFromVersiontWireProtocolAddresstExtensionSupportedFeatures(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRAsscCs4||kr0tddj|�dtj��ndS(Ntmsgs3Invalid status format by extension: Missing {0} keytcode(tExtensionStatusErrorRFtStatusFileMalformed(tobjtkeyt
full_key_path((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytvalidate_has_key�scCs:||kr6tddj|||�dtj��ndS(NRQs.Invalid value {0} in range {1} at the node {2}RR(RSRFRT(tvaltvalid_rangetname((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytvalidate_in_range�scCs=|dkrdSt|dd�t|dd�|jd�S(NtlangsformattedMessage/langtmessagesformattedMessage/message(tNoneRXtget(tformatted_message((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytparse_formatted_message�s
cCs�t|dd�t|dtjd�t�}|jd�|_|jd�|_|jdd�|_|jd�}t	|�|_
|S(Ntstatusssubstatus/statusR[RRitformattedMessage(RXR\R;R@RR`R[RcRRRbR^(t	substatusRcRa((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytparse_ext_substatus�s	c	Cs}|dkrdSt|t�sSt|�d }tddj|�dtj��n|s]dS|d}t|dd�|d}t|dd�|d}|tj	kr�tj
}n|jd�}||_|jd	�|_
||_|jdd�|_|jd
�}t|�|_|jdg�}|dkrCg}nx3|D]+}|dk	rJ|jjt|��qJqJWdS(NiRQs*The extension status must be an array: {0}RRiRcs
status/statustconfigurationAppliedTimet	operationRdRe(R_t
isinstancetlistRRSRFRTRXR;R@R>R`RgRhRcRRRbR^t
substatusListtappendRf(	t
ext_statustdatatdata_stringtstatus_dataRctapplied_timeRatsubstatus_listRe((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytparse_ext_status�s6$


			
c	Cs�tjjtj�d�}tjj|�s1dSx!tjtjj|d��D]}tjj|�}tjjtj�|d�}tjj|�rPx�d
D]�}tjj|||j	��}tjj|d|�}tjj
|�r�tjj
|�r�ytj||�WqJt
k
rF}tjd||t|��qJXq�q�WqPqPWytj|�Wn,t
k
r�}tjd	|t|��nXdS(s�
    Migrate handler state and status (if they exist) from an agent-owned directory into the
    handler-owned config directory

    Notes:
     - The v2.0.x branch wrote all handler-related state into the handler-owned config
       directory (e.g., /var/lib/waagent/Microsoft.Azure.Extensions.LinuxAsm-2.0.1/config).
     - The v2.1.x branch original moved that state into an agent-owned handler
       state directory (e.g., /var/lib/waagent/handler_state).
     - This move can cause v2.1.x agents to multiply invoke a handler's install command. It also makes
       clean-up more difficult since the agent must remove the state as well as the handler directory.
    t
handler_stateNt*tconfigtStatetStatustHandlers.Exception occurred migrating {0} {1} file: {2}s$Exception occurred removing {0}: {1}(RwRx(tostpathtjointconftget_lib_dirtisdirtglobtiglobtbasenametlowertisfiletshutiltmovet	Exceptiontloggertwarntstrtrmtree(thandler_state_paththandler_paththandlerthandler_config_pathtfilet	from_pathtto_pathte((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytmigrate_handler_state�s0
%
%tExtHandlerStatecBs eZdZdZdZdZRS(tNotInstalledt	InstalledtEnabledt
FailedUpgrade(R6R7R�R�R�R�(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��stGoalStateStatuscBs&eZdZdZdZdZdZRS(s)
    This is an Enum to define the State of the GoalState as a whole. This is reported as part of the
    'vmArtifactsAggregateStatus.goalStateAggregateStatus' in the status blob.
    Note: not to be confused with the State of the ExtHandler which reported as part of 'handlerAggregateStatus'
    tSuccesstFailedt
Initializet
Transitioning(R6R7R8R�R�R�R�(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��s
cCs
t|�S(N(tExtHandlersHandler(tprotocol((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytget_exthandlers_handlersccs�tj�}x�tj|�D]z}tjj||�}|dk	rat|�ra||kraqn|r�tj	|�stj
|�r�qn||fVqWdS(N(R}R~RztlistdirR{R|R_tanytversiontis_agent_packaget
is_agent_path(tskip_agent_packagetignore_namestlib_dirR[R{((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytlist_agent_lib_directorys$$R�cBs%eZd�Zd�Zd�Zd�Zd�Zedd��Z	d�Z
d�Zed��Zd	�Z
dd
�Zedd��Zd�Zeedd
��Zd�Zed��Zed��Zedd��Zdd�Zd�Zd�Zedd�Zd�Zd�ZRS(cCs+||_d|_d|_t�|_dS(N(R�R_text_handlerst(_ExtHandlersHandler__gs_aggregate_statusR
treport_status_error_state(tselfR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__init__s			cCs7|jdk	o6|jjtjko6|jjtjkS(N(R�R_RcR�R�RRRt$GoalStateUnsupportedRequiredFeatures(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__last_gs_unsupported"sc	s(d\����yh|jj�}tj|j�|_|jjj�j	�|j
�s^dS|j�|j�|j
�Wn[tk
r�}djtj|��}tj|�tdtjdtd|dt�dSXd����fd�}tjj�}d}dj|��}tj|�tdtjd|�zMy|j��|j�Wn+tk
r�}djtj|��}nXWdt|�}|dkr�dj|d	|��}tj|�n(d
j|d	|�|�}tj|�tdtjd|dkd|dtd	|�XdS(NuJProcessExtensionsInGoalState - Exception processing extension handlers:{0}topt
is_successR^t	log_eventcs?|dkr"dj�����Sdj�|����SdS(NsP[Incarnation: {0}; Activity Id: {1}; Correlation Id: {2}; GS Creation Time: {3}]sX[Incarnation: {0}; {1} ms; Activity Id: {2}; Correlation Id: {3}; GS Creation Time: {4}](R_RF(tduration(tactivity_idtcorrelation_idtetagtgs_creation_time(sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytgoal_state_debug_info@ss(ProcessExtensionsInGoalState started {0}s*ProcessExtensionsInGoalState completed {0}R�s1ProcessExtensionsInGoalState failed {0}
Error:{1}(NNNN(R_R�tget_extensions_goal_statetcopytdeepcopyt
extensionsR�tclienttget_goal_statetincarnationt_extension_processing_allowedtcreated_on_timestampR�R�R�RFR%tformat_exceptionR�R�RR
tExtensionProcessingtFalsetdatetimetutcnowtinfot2_ExtHandlersHandler__process_and_handle_extensionst_cleanup_outdated_handlersR(	R�textensions_goal_stateR>RQR�t	utc_startR^R�R�((R�R�R�R�sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytrun)sD		

"

 
cCsA|jjj�j}t�}g|D]}||kr%|^q%S(N(R�R�R�trequired_featuresR(R�R�tsupported_featurestfeature((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__get_unsupported_featuresZs	c	CsUy�|j�}t|�r�dj|dj|��}tj|�tdtjd|dt	j
d|�|_tdt
jdtd|d	t�n7|j|�tdtjd|dt	jdd
�|_Wn�tk
rP}djtj|��}tdtjd|dt	jd|�|_tj|�tdt
jdtd|d	t�nXdS(Ns>Failing GS incarnation: {0} as Unsupported features found: {1}s, Rctseq_noRRR^R�R�R�sGoalState executed successfullys/Unexpected error when processing goal state:{0}(t-_ExtHandlersHandler__get_unsupported_featuresR�RFR|R�R�R!R�R�RR�R�RR
tGoalStateUnsupportedFeaturesR�thandle_ext_handlersR�R�R%R�tGoalStateUnknownFailureR�(R�R�tunsupported_featuresRQR>((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__process_and_handle_extensions_s6
	

		
cCs�tjj|�s+tjt|�dkr/dS|jd�}|d|!}|dk	rg||krgdStd|�}t	t
||d��|_t||�S(NR-iR[i(
RzR{RtretmatchtHANDLER_NAME_PATTERNR_trfindRR�R'R�tExtHandlerInstance(R[R{R�t
skip_handlerst	separatorthandler_nameteh((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt"get_ext_handler_instance_from_path~s+
c
Cs3|j�rdSg}g}g|jD]}|j^q&}x�tdt�D]�\}}yJtjd|d|d|jd|�}|dk	r�|j	|�wKnWnt
k
r�qKnXtjj
|�rKtjj|dtt�!�rKtjt|�sqKn|j	|�qKqKWxg|D]_}y'tj|�tjdj|��Wqtk
r|}	tjdj||	j��qXqWx�|D]�}
|
j�tjjtj�|
j�t�}tjj
|�r�y'tj|�tjd	j|��Wq+tk
r'}	tjd
j||	j��q+Xq�q�WdS(NR�R[R{R�R�is&Removed orphaned extension package {0}s*Failed to remove orphaned package {0}: {1}sRemoved extension package {0}s+Failed to remove extension package {0}: {1}( t(_ExtHandlersHandler__last_gs_unsupportedR�R[R�tTrueR�R�R�R_RlR�RzR{R�RtlentHANDLER_PKG_EXTR�R�t_HANDLER_PKG_PATTERNtremoveR�tverboseRFtOSErrorR�tstrerrortremove_ext_handlerR|R}R~t
get_full_name(R�thandlerstpkgstext_handlertext_handlers_in_gstitemR{thandler_instancetpkgR�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��sH		


!

$

%
cCsStj�stjd�tStj�rO|jj�jrOtj	d�tSnt
S(NsExtension handling is disabledsExtension handling is on hold(R}tget_extensions_enabledR�R�R�tget_enable_overprovisioningR�R�ton_holdR�R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��s

cCs2|\}}|dk	r(|j|j�S|j�S(N(R_tdependency_level_sort_keytstate(ttupt	extensionR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__get_dependency_level�scCs�g}xx|jD]m}t|j�rQ|jg|jD]}||f^q5�qtjdj|j��|jd|f�qW|j
d|j�|S(Ns5No extension/run-time settings settings found for {0}RV(R�R�tsettingstextendR�R�RFR[RlR_tsortt)_ExtHandlersHandler__get_dependency_level(R�tall_extensionsR�text((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt&__get_sorted_extensions_for_processing�s,c

Cs)|jstjd�dStjj�tjdt�}|j�}t|�rd|j	|d�nd}d}x�|D]�\}}t||jd|�}|dk	r+|j
|�r|j�dkr�|jd|dd�n|j|dtjddd	tjd|�qw|jd|dd�qwn|j|||�}	|j	||f�}
d|
kol|knrw|j|�}y8|	s�td
j|���n|j||d|�Wq!tk
r}tjdj|��t|�}td|d
|jjdtjdtd|�q!XqwqwWdS(Ns5No extension handlers found, not processing anything.tminutesi����iR�R^RRRcRhsSSkipping processing of extensions since execution of dependent extension {0} faileds\Dependent extension {0} failed or timed out, will skip processing the rest of the extensionsR[R�R�R�( R�R�R�R�R�t	timedeltat_DEFAULT_EXT_TIMEOUT_MINUTESt9_ExtHandlersHandler__get_sorted_extensions_for_processingR�RR_R�R�tshould_perform_multi_config_optget_handler_statustset_handler_statustcreate_status_file_if_not_existR;R>R
R�thandle_ext_handlertget_extension_full_nameR�RFtwait_for_handler_completionR�RRR�R�R�(
R�R�t
wait_untilRt
max_dep_leveltdepends_on_err_msgR�R�t	handler_itextension_successt	dep_leveltextension_full_nameR>((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��sJ	
%	
	
	cCs<|j|�}|dkr5tjdj|��dSyYtd}}xEtjj�|kr�|j|�\}}|r|Pnt	j
d�qHWWn:tk
r�}dj|tj
|��}t|��nX|rtjj�|krdj||�}t|��n|tjkr8dj||�}t|��ndS(s�
        Check the status of the extension being handled. Wait until it has a terminal state or times out.
        :raises: Exception if it is not handled successfully.
        s6No settings found for {0}, not waiting for it's statusNisoFailed to wait for Handler completion due to unknown error. Marking the dependent extension as failed: {0}, {1}sfDependent Extension {0} did not reach a terminal state within the allowed timeout. Last status was {1}s7Dependent Extension {0} did not succeed. Status was {1}(RR_R�R�RFR�R�R�tis_ext_handling_completettimetsleepR�R%R�R;R?(RRR�textension_namet
ext_completedRcR�RQ((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR%s,
c
Cs7yH|jjr$t|jj��n|jj}|jd|d|�dkr�|tjkr�|jj	}|jj
}dj||�}|jt
j�td|��n|jjd||�|tjkr�|j||�nb|tjkr|j||�n@|tjkr(|j|d|�ndj|�}t|��tSWn�tk
r�}	|j|�}
dj|
t|	��}|j|dtjd	|	jd
|jd|�t d|
d
|jj	d|jdt!dtd|�nMtk
r2}	djt|	��}|j"||	dt
j#d|d|�nt$k
ro}	|j"||	|jt|	�dt!d|�n�t%k
r�}	djt|	��}|j"||	dt
jd|d|�nxtk
r�}	|j"||	|jt|	�d|�nAt&k
r2}	d|	_|j"||	|jt|	�d|�nXt!S(sy
        Execute the requested command for the handler and return if success
        :param ext_handler_i: The ExtHandlerInstance object to execute the command on
        :param extension: The extension settings on which to run the command on
        :param etag: Current incarnation of the GoalState
        :return: True if the operation was successful, False if not
        ttarget_stateR�s8Unable to find version {0} in manifest for extension {1}RQs+Target handler state: {0} [incarnation {1}]uUnknown ext handler state:{0}s/Error processing MultiConfig extension {0}: {1}RcRRRhR^R[R�R�R�R�s[Ran into config errors: {0}. 
Please retry again as another operation with updated settingst	report_optreports!Failed to download artifacts: {0}i����N('R�tis_invalid_settingRtinvalid_setting_reasonR�tdecide_versionR_R#R�R�R[RFt
set_operationR
tDownloadRR�R�t
handle_enabletDisabledthandle_disablet	Uninstallthandle_uninstallR�RRRRR;R>RRRhRR�t9_ExtHandlersHandler__handle_and_report_ext_handler_errorstInvalidExtensionConfigRRR�(R�t
ext_handler_iR�R�Rtthandler_versionR[terr_msgR^R>text_nameRQ((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR
Lsb	!	
	c
Cs�|jd|d|j�|j|�rV|j|dtjd|jd|d|�n|r�|j|�}|jj}t	d|d|d|dt
d	td|�ndS(
NR^RRRcRhR[R�R�R�R�(RRRR	RR;R>RR�R�RR�R�(R+R>RR^RR�R[R,((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt&__handle_and_report_ext_handler_errors�s$cCs�d}|j�}|j�}|jjd|j��|tjksU|tjkr�|j	||�|dkr�|j
d|�q�|j|�r�tj
|||�}q�n|j�|j|�|j|||�dS(s�
             1- Ensure the handler is installed
             2- Check if extension is enabled or disabled and then process accordingly
        s&[Enable] current handler state is: {0}R�N(R_tget_installed_ext_handlertget_handler_stateR�R�R�R�R�R�t&_ExtHandlersHandler__setup_new_handlertinstallt
version_neR�t._update_extension_handler_and_return_if_failedtensure_consistent_data_for_mctupdate_settingst%_ExtHandlersHandler__handle_extension(R�R+R�tuninstall_exit_codetold_ext_handler_itcurrent_handler_state((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR$�s

cCs5|jtj�|j�|j�|j|�dS(N(tset_handler_stateR�R�tdownloadt
initializeR7(R+R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__setup_new_handler�s

cCs�|dkr|j�dS|jjd|j�|jtjkrX|j|d|�nq|jtjkr�|j|�tjkr�|j	|dt
�q�|jjd�ntdj|j
|j���dS(NsRequested extension state: {0}R9tignore_errors.Extension already disabled, not doing anythings.Unknown requested state for Extension {0}: {1}(R_tenableR�R�R�R"R�R%tget_extension_statetdisableR�RRFR[(R+R�R9((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__handle_extension�s
c
sh��fd�}td��}�j�tjkr��jr{t�j�r{|dt�jdd��|�j
j<nx9�jD]+}|dt�jd|��||j<q�Wn�j
���j��r��jd|d�j
jd|�n.�j
j}�jd|d|d|d|�|dt�jd|��}�j��jd|d|�|S(	Ncs�t}d}y�j�j�}|�Wn�tk
r�}dt|�|f}�jd|dt�|s|t|��n|j}t|t	�r�|j
}ntjd�nX|S(sS
            Created a common wrapper to execute all commands that need to be executed from the old handler
            so that it can have a common exception handling mechanism
            :param func: The command to be executed on the old handler
            :return: True if command execution succeeds and False if it fails
            is%s; ContinueOnUpdate: %sR^R�s>Continue on Update failure flag is set, proceeding with update(
R�t
load_manifesttis_continue_on_update_failureRRtreport_eventRRRRiRt	exit_codeR�R�(tfunctcontinue_on_update_failureRHR�RQ(R+R:(sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt2execute_old_handler_command_and_return_if_succeeds�s	cSstS(N(R3(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt<lambda>sRIR�tdisable_exit_codestupdating_from_versionR,R9(RR1R�R�tsupports_multi_configR�R�RRCR_R�R[tenabled_extensionstcopy_status_filest
version_gttupdateR�t	uninstallR�tupdate_with_install(R:R+R�RKRMtold_extRNR9((R+R:sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR5�s.%&


cCsH|j�}|jjd|j��|tjkrD|j|�ndS(s�
            Disable is a legacy behavior, CRP doesn't support it, its only for XML based extensions.
            In case we get a disable request, just disable that extension.
        s'[Disable] current handler state is: {0}N(R1R�R�R�R�R�RC(R�R+R�Rt((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR&(scCs�|j�}|jjd|j��|tjkr�|tjkr�|jrjt|j	�rj|j
�nx!|jD]}|j
|�qtWny|jd|�Wq�t
k
r�}|jdt|�dt�q�Xn|j�dS(s	
        To Uninstall the handler, first ensure all extensions are disabled
            1- Disable all enabled extensions first if Handler is Enabled and then Disable the handler
                (disabled extensions wont have any extensions dependent on them so we can just go
                ahead and remove all of them at once if HandlerState==Uninstall.
                CRP will only set the HandlerState to Uninstall if all its extensions are set to be disabled)
            2- Finally uninstall the handler
        s)[Uninstall] current handler state is: {0}R�R^R�N(R1R�R�R�R�R�R�ROR�R�RCRPRTRRGRR�R�(R�R+R�Rttenabled_extR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR(2s	
#cCs�g}x�tdtdttg�D]y\}}y/tjd|d|d|j�}|dk	r\|j}t	�}xlt
jtj
j|j�d��D]F}tjd|�}	|	dk	r�|j|	jd��t|_q�q�Wt|�s�|j|j�nxK|D]C}
td|
�}|j|�\}}
||_|jj|�qW|j|�nWq"tk
r�}|r�tjd	j|t |���q�q"Xq"W|S(
NR�R�R[R{R�s*.*.settingss(?P<extname>\w+)\.\d+\.settingstextnames1Can't fetch ExtHandler from path: {0}; Error: {1}(!R�R�RR&R�R�R�R_R�tsetR�R�RzR{R|tget_conf_dirR�tsearchtaddtgroupROR�R[R$tget_status_file_pathtsequenceNumberR�RlR�R�R�RFR(R�tincarnation_changedthandlers_to_reportR�R{R�R�textensions_namest
settings_pathR�R.RR�t_R>((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__get_handlers_on_file_systemQs6		+
	*c	Cspytddddd|jd|�}g}|j�rK|j|�}n(|j�rs|jdk	rs|j}nx]|D]U}y|j|||�Wqztk
r�}tdt	j
dtdt|��qzXqzWt
jd	�y.|jj|�t
jd
�|jj�Wn�tk
rL}|jj�dj|�}t
j|�nTtk
r�}|jj�dj|�}ttdtdt	j
dtd|�nX|jj�r�d
j|jj�}ttdtdt	jdtd|�|jj�n|j|�|SWn^tk
rk}djtj|��}t
j |�ttdtdt	j!dtd|�dSXdS(s�
        Go through handler_state dir, collect and report status.
        Returns the status it reported, or None if an error occurred.
        RcR.R^sGuest Agent is runningtgs_aggregate_statustvm_agent_update_statusR�R�sReport vm agent statuss-Completed vm agent status report successfullys%Failed to report vm agent status: {0}R�s2Failed to report vm agent status for more than {0}uFailed to report status: {0}N("R R�R�t0_ExtHandlersHandler__get_handlers_on_file_systemR�R_treport_ext_handler_statusRRR
R�R�RR�R�R�treport_vm_statusR�tresetRtincrRFRR(R)tis_triggeredt
min_timedeltatReportStatusExtendedt&write_ext_handlers_status_to_info_fileR�R%R�R�tReportStatus(	R�R`Rgt	vm_statusRaR�R>R^RQ((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytreport_ext_handlers_status}sf		
*



				

		cCstjjtj�tj|jj���}|jj	�}t
�}|dk	rctj
|�}nitd6ttj��d6djttt�d6gt�j�D]\}}|^q�d6}||d<t
�}|dk	rSt|�}	|	jdt
��jd�}
xE|
D]:}|jd	�dk	r|jd
�||jd	�<qqWn|jdt
��jdt
��}x}|D]u}|j|jd
��|d<|jdt
��jdt
��jdt
��}
|
jdd�|
jdd�q~Wtj|tj|��dS(Nt	agentNamet
daemonVersionsPython: {0}.{1}.{2}t
pythonVersiontextensionSupportedFeaturest_metadataNotSentToCRPtvmAgenttextensionHandlersR[ROtaggregateStatusthandlerAggregateStatusthandlerNametsupportsMultiConfigtruntimeSettingsStatustsettingsStatusRcRdRe(RzR{R|R}R~tAGENT_STATUS_FILERFR�tget_incarnationtget_status_blob_datatdictR_tjsontloadsR(R�R�tget_daemon_versionR*R,R+RtitemsRR`tpoptfileutilt
write_filetdumps(R�Rrtstatus_pathtstatus_blob_dataRnR[RdRxtsupport_multi_configtvm_status_datatvm_handler_statusesthandler_statusthandler_aggregate_statusRc((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRp�s4-	)
	
&$
3cCsXt||j�}|j�}|dkrn|jtjkrjdj|j�}|j	|d|d|�ndS|j
�}g}|tjks�|j
r%|tjkry1|j�}	|	dk	r�|	jd�|_nWqtk
r}
|jdt|
�d|
j�qXn|j||�}nt|�sA|j|�n|jjj|�dS(Ns?No handler status found for {0}. Not reporting anything for it.tlog_msgt	event_msgRcR^RR(R�R�R
R_R�R#R'RFR[t"report_error_on_incarnation_changeR1R�R�ROtcollect_heartbeatR`RcRRRRRtget_extension_handler_statusesR�RlRyRzR�(R�RrR�R`R+R�RQRttext_handler_statusest	heartbeatR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRi�s*&N(R6R7R�R�R�R�R�tstaticmethodR_R�R�R�RRR�RR
R�R)R$R2R8R5R&R(RhR�RsRpRi(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�s8			1			5		B&	L	>
		,E	%R�cBsPeZdNdOd�Zed��Zed��Zed��ZdOd�Zd�Z	e
d��ZdOdOd	�ZdQdOd
�Z
d�Zd�Zd
�Zd�Zd�Zd�ZdOdeded�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdOdOd�Zd�Zd�ZdOd�Z dOe!d�Z"dOdOd �Z#dOd!�Z$d"�Z%dOdOdOdOd#�Z&dOdOd$�Z'd%�Z(dOd&�Z)d'�Z*d(�Z+d)�Z,dOe-j.d*�Z/d+�Z0d,�Z1e
d-��Z2dOd.e3j4dOdOd/�Z5d0�Z6d1�Z7d2�Z8d3�Z9dOd4�Z:d5�Z;d6�Z<d7�Z=dOd8�Z>d9�Z?dOd:�Z@d;�ZAeBjCddd<�ZDd=�ZEd>�ZFdOd?�ZGd@�ZHdA�ZIdB�ZJdC�ZKdD�ZLdE�ZMdF�ZNdG�ZOe
dH��ZPe
dI��ZQe
dJ��ZRddK�ZSe
eTdL��ZURS(Ri
icCsP||_||_d|_d|_d|_d|_|jd|d|�dS(NR�texecution_log_max_size(R�R�R_RhR�tpkg_fileR�t
set_logger(R�R�R�R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�s						cCs
|jjS(N(R�RO(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyROscCs
|jjS(N(R�R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�scCsB|jr;g|jD]$}|j|�tjkr|^qS|jS(s�
        In case of Single config, just return all the extensions of the handler
        (expectation being that there'll only be a single extension per handler).
        We will not be maintaining extension level state for Single config Handlers
        (ROR�RBR"R�(R�R((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRP#s	2cCs2|j|�r(dj|jj|j�S|jjS(s�
        Get the full name of the extension <HandlerName>.<ExtensionName>.
        :param extension: The requested extension
        :return: <HandlerName> if MultiConfig not supported or extension == None, else <HandlerName>.<ExtensionName>
        s{0}.{1}(R	RFR�R[(R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR.scCs�ytj|j�dd�Wn&tk
rE}|jjd|�n�X|j|�s[dndj|j�}t	j
j|j�|�}|j|||j
|��|jjtjjtjj|�dS(Ntmodei�u'Failed to create extension log dir: {0}sCommandExecution.logsCommandExecution_{0}.log(R�tmkdirtget_log_dirtIOErrorR�R>R	RFR[RzR{R|t'_ExtHandlerInstance__truncate_file_headRtadd_appendertAppenderTypetFILEtLogLeveltINFO(R�R�R�R�t
log_file_nametlog_file((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__set_command_execution_log9s!c	Cs^y�tj|�j|krdSt|d��S}|jd|d�|j�}t|dd��}tj||�WdQXWdQXtj|d|�Wn�t	t
fk
rY}t|�r�dStj
d||t|��x{||dfD]e}ytj|�Wq�t	t
fk
rQ}t|�r;tjd|�qRtjd||�q�Xq�WnXdS(	Ntrbi����is.tmptwbsXException occurred while attempting to truncate {0} for extension {1}. Exception is: {2}sFile '{0}' does not exist.s=Exception occurred while attempting to remove file '{0}': {1}(Rztstattst_sizetopentseektreadlineR�tcopyfileobjtrenameR�R�RR�R>RR�R�R�(	tfilenametmax_sizeRt
existing_fileRdttmp_fileR�tftcleanup_exception((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__truncate_file_headFs.c
Cs4|jjd�y|jj|j�}WnEtk
rM}td|��n$tk
rp|jt	j
��nXtt|jj
��}|j�}|dkr�|n	t|�}d}d}	|jjdd��xM|jD]B}
t|
j
�}||kr	|
}	n|j|�r�|
}q�q�W|tjtjfkr�|	dkrtdj||jj�}|jj|�n|	|_|dk	r�t|�nd|j_
n0||_|jdk	r�t|j
�|j_
n|jdk	r�|jjd|jj
�n|jt|jj
��s-|jd|�n|jS(NsDecide which version to usesFailed to get ext handler pkgsRVcSs
t|j�S(N(R'R�(tp((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRLssXFailed to find installed version: {0} of Handler: {1}  in handler manifest to uninstall.sUse version: {0}R�(R�R�R�tget_ext_handler_pkgsR�RRRR"R
R#R'R�R�tget_installed_versionR_tversionsRtmatchesR#R'R%RFR[R�R�R�(
R�RR�tpkg_listR�trequested_versiontinstalled_version_stringtinstalled_versiontselected_pkgt
installed_pkgR�tpkg_versionRQ((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR!jsF
	
	'	cCsDdj|j|��}tjtj|�|_|j||�dS(Ns[{0}](RFR�R�tLoggertDEFAULT_LOGGERt._ExtHandlerInstance__set_command_execution_log(R�R�R�tprefix((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��scCs.|jj}|jj}t|�t|�kS(N(R�R�R'(R�tothertself_versiont
other_version((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRR�scCs.|jj}|jj}t|�t|�kS(N(R�R�R'(R�R�R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR4�scCsG|j�}|dkrdStj|j�}||_t||j�S(N(R�R_R�R�R�R�R�R�(R�tlatest_versiontinstalled_handler((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR0�s	cCs,d}x	tjtjjtj�|jj	d��D]�}tjj
|�sSq5n|jd�}t||d�}tjj|dd�}tjj
|�s�tj|�tjks�tj|�tjkr�tjdj|��q5n|dks||kr5|}q5q5W|dk	r(t|�SdS(Ns-*R-iRvtHandlerStates8Ignoring version of uninstalled or failed extension: {0}(R_R�R�RzR{R|R}R~R�R[RR�R'texistsR�t	read_fileR�R�R�R�R�RFR�(R�R�R{R�tversion_from_patht
state_path((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��s5+
cCs�|jjd�|j�}|j�}tjj|d�}tjj|�rbtj||�n|j	�}|j	�}tjj
|�r�xTtj|�D]@}tjj||�}tjj|�r�tj||�q�q�WndS(Ns(Copy status files from old plugin to newtmrseq(R�R�tget_base_dirRzR{R|R�R�tcopy2tget_status_dirRR�(R�R:told_ext_dirtnew_ext_dirtold_ext_mrseq_filetold_ext_status_dirtnew_ext_status_dirtstatus_file((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRQ�scCs
||_dS(N(Rh(R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR"�sticCsb|jj}|dkr$|jjn|}td|d|d|d|jd|d|d|�dS(NR[R�R^R�R�R�R�(R�R�R_R[RRh(R�R[R^R�R�R�text_handler_version((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRG�scCs�|jjd|�y1|jj||�sCtdj|���nWnOtk
r�}|jjdt|��tjj	|�r�tj
|�ntSXtS(Ns"Downloading extension package: {0}s-Failed to download extension package from {0}s(Error downloading extension package: {0}(
R�R�R�tdownload_ext_handler_pkgR�RFRRzR{R�R�R�R�(R�t
source_urittarget_filet	exception((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt_download_extension_package�scCs�|jjd|�ytj|�j|�WnYtk
r�}tjdt|��tj|�tj	j
|�r�tj|�nt
SXtS(Ns Unzipping extension package: {0}s,Error while unzipping extension package: {0}(R�R�tzipfiletZipFilet
extractallR�RRzR�R{R�R�R�R�R�(R�tsource_filettarget_directoryR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt_unzip_extension_package�s
c	Cs�tjj�}|jtj�|jdksX|jjdksXt|jj�dkrgt	d��nt
jjt
j�|j��}t}t
jj|�r�|jjd|�|j||j��r�t}q�|jjd�n|s�t}d}x�|tkr�|jj}tj|�xH|D]@}|j||�sFq(n|j||j��r(t}Pq(q(W|rvPn|jjd�tjd�|d7}q�W|s�t	dd	tj��nt|�}|j d
dd|�n||_!dS(
NisNo package uri founds%Using existing extension package: {0}s:The existing extension package is invalid, will ignore it.sQFailed to download the extension package from all uris, will retry after a minutei<isFailed to download extensionRRR^sDownload succeededR�("R�R�R"R
R#R�R_turisR�RRzR{R|R}R~t"get_extension_package_zipfile_nameR�R�R�R�R�R�R�tNUMBER_OF_DOWNLOAD_RETRIEStrandomtshuffleR�RRRtPluginManifestDownloadErrorRRGR�(	R�t	begin_utctdestinationtpackage_existst
downloadedtit
uris_shuffledturiR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR=sD9!	


	cCs>|jr:|j�j�r:tdj|jj���ndS(Ns]Handler {0} does not support MultiConfig but CRP expects it, failing due to inconsistent data(ROREtsupports_multiple_extensionsRRFR�R[(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR61scCs�|jjdj|j���x@tj|j��D])}tj|tj	|�j
t	jB�q5Wtj|j�d�}|dkr�td��ny/tj|dt�}tj|j�|�WnDtk
r
}tj|d|j�|jg�td|��nX|j�yp|j�}tj|dd�|j�}tj|dd�ttj�jr�tj|j�dd�nWnStk
r�}tj|d|j�|jg�td	j|j��|��nX|j�|j �dS(
NsInitializing extension {0}sHandlerManifest.jsonsHandlerManifest.json not foundt
remove_bomtpathsu#Failed to save HandlerManifest.jsonR�i�u$Failed to initialize extension '{0}'(!R�R�RFR�R�t
get_all_filesR�tchmodRzR�tst_modetS_IXUSRtsearch_fileR_RR�R�R�tget_manifest_fileR�t
clean_ioerrorR�R6R�R�RZRRtExtensionTelemetryPipelinetis_supportedtget_extension_events_dirtcreate_handler_envtset_extension_resource_limits(R�R�tman_filetmanR�t
status_dirtconf_dir((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR>;s2'"
 ""
cCsc|j�}|j�}|j||jj�}tj�jd|�tj�j|j	��dS(NR(
R�REtget_resource_limitsR�R�Rtget_instancetsetup_extension_slicet'set_extension_services_cpu_memory_quotatget_service_list(R�RR
tresource_limits((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyResc
Cs |j|�\}}|dk	rtjj|�rtjj�jd�}idd6|d6i|j|�d6|d6|d6|d6id	d
6|d6d6d6g}	tjjtjj	|��s�t
jtjj	|�d
d�n|jj
dj||��t
j|tj|	��ndS(Ns%Y-%m-%dT%H:%M:%SZg�?R�ttimestampUTCR[RhRcRRsen-USR]R^RdR�i�s7Creating a placeholder status file {0} with status: {1}(R^R_RzR{R�R�R�tstrftimeRtdirnameR�R�R�R�RFR�R�R�(
R�R�RcRRRhR^RdR�tnowtstatus_contents((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRns$"cCsxy|j||�Wn4tk
rJ}|j|�rDt|��n�nX|jtj�|jdtj	dd�dS(NRcR^sPlugin enabled(
t_enable_extensionRR	RR<R�R�RR5R9(R�R�R9R>((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRA�scCs|jo|dk	S(N(ROR_(R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR	�sc
Cs;|dk	rt|�nt}i|tj6}|j|j��rltj�j	|j��rl|j
�n|jtj
�|j�}|j�}|jjdj|��|j|dddddtjd|d|�|j|�r|j|tj�n|j|j�|jj�}tj�j|j��dS(	NsEnable extension: [{0}]tcmd_nameRAttimeouti,textension_error_codetenvR�(R_R�R3RARItis_azuremonitorlinuxagentR�RRt,is_extension_resource_limits_setup_completedRR"R
tEnableREtget_enable_commandR�R�RFtlaunch_commandRtPluginEnableProcessingFailedR	t(_ExtHandlerInstance__set_extension_stateR"R�R
R�R�t)start_tracking_extension_services_cgroupsR(R�R�R9RR
t
enable_cmdR((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�s$

c
Csm|jtj�|j�}|j�}|jjdj|��|j|dddddt	j
d|�dS(NsDisable extension: [{0}]RRCRi�RR�(R"R
tDisableREtget_disable_commandR�R�RFR!RtPluginDisableProcessingFailed(R�R�R
tdisable_cmd((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt_disable_extension�s	c	Cs�y|j|�Wnotk
r�}|s/�ndjt|��}|jj|�|jd|j|�d|dtdt�nX|j	|�r�|j
|�n|js�t|j
�r�|jtj�|jdtjdd�ndS(Ns6[Ignored Error] Ran into error disabling extension:{0}R[R^R�R�RcsPlugin disabled(R*RRFRR�R�RGRR�R	t1_ExtHandlerInstance__remove_extension_state_filesROR�RPR<R�R�RR5R:(R�R�R@R>RQ((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRC�s$cCs�|dk	rt|�nt}i|tj6}|j�}|j�}|jjdj	|��|j
tj�|j
|ddddd|dtjd|�|jtj�|jd	tjd
d�dS(NsInstall extension [{0}]RR3Ri�R�RRRcR^s Plugin installed but not enabled(R_R�R3RARIREtget_install_commandR�R�RFR"R
tInstallR!RtPluginInstallProcessingFailedR<R�R�RR5R:(R�R9R�RR
tinstall_cmd((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR3�scCs�|jtj�|j�}|j|j�|jj�}tj	�j
|j��tj	�j|j��|j
�}|jjdj|��|j|ddd|�dS(NsUninstall extension [{0}]RRTR�(R"R
t	UnInstallRER
R�R�R�RRt(stop_tracking_extension_services_cgroupsRt'remove_extension_services_drop_in_filestget_uninstall_commandR�R�RFR!(R�R�R
Rt
uninstall_cmd((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRT�s

cCs4y�tjjtj�|j��}tjj|�rYtj|�|jj	d|�n|j
�}tjj|�r�|jjd|�d�}t
j|d|�n|jjdj|j���tj�jd|j��WnHtk
r/}dj|�}|jd|d	t�|jj|�nXdS(
Ns%Deleted the extension zip at path {0}s'Remove extension handler directory: {0}cSs;|\}}}t|t�s.|jdkr7|�ndS(Ni(RiR�terrno(Rdt__texc_infoR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyton_rmtree_errorstonerrorsRemove the extension slice: {0}Rs1Failed to remove extension handler directory: {0}R^R�(RzR{R|R}R~R�R�R�R�R�R�RR�R�R�RFR�RRtremove_extension_sliceR�RGR�R�(R�tzip_filenametbase_dirR8R�R^((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��s"!
	c
Cs^|dkr|jj}ni|d6|tj6}|js`t|j|jj��|tj	<n`g}xA|j
D]6}|ji|jd6t|j|j��d6�qpWtj
|�|tj<ys|jtj�|j�}|j�}	|jjdj|	��|j|	ddddd	tjd
|d|�Wn$tk
rY|jtj��nXdS(NtVERSIONt
extensionNametexitCodesUpdate extension [{0}]RRSRi�RRR�(R_R�R�RARNRORR`R[RGR�RlR�R�RHR"R
tUpdateREtget_update_commandR�R�RFR!RtPluginUpdateProcessingFailedRR<R�R�(
R�R,RMRNR�Rt
disable_codesRR
t
update_cmd((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRSs2
	%	
!	
cCsU|j�}|j�r1|jd|d|�n|jjd�|jtj�dS(NR9R�s7UpdateWithInstall not set. Skip install during upgrade.(REtis_update_with_installR3R�R�R<R�R�(R�R9R�R
((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRU6s
c
Cs�d}|jr.|dks*|jdkr.|Sy$d}|j�}xtj|�D]�}tjj||�}tjj|�s�qSny�t	j
d|�}|dk	r|jd�}|jr�|j|kr�wSnt|jd��}	tjj
|�}
|
|kr|	}|
}qnWqStttfk
rL|jjd|�qSqSXqSWWn5tk
r�}tjdjt|���d}nX|S(	s0
        The sequence number is not guaranteed to always be strictly increasing. To ensure we always get the latest one,
        fetching the sequence number from config file that was last modified (and not necessarily the largest).
        :return: Last modified Sequence number or -1 on errors
        i����is/((?P<ext_name>\w+)\.)*(?P<seq_no>\d+)\.settingsR.R�sFailed to parse file name: {0}s5Error fetching sequence number from config files: {0}N(ROR_R[RZRzR�R{R|R�R�R[R]tinttgetmtimet
ValueErrort
IndexErrort	TypeErrorR�R�R�RFR(R�R�R�tlargest_modified_timeRR�t	item_pathR�R.tcurr_seq_notcurr_modified_timeR>((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt+_get_last_modified_seq_no_from_config_files?s8$
c	CsFd}d}|dk	rj|jdk	rjyt|j�}Wqjtk
rftjdj|j��qjXn|dkr�|j|�}n|dk	r*|dkr*|j|�r�|dk	r�|j	dk	r�t
jj|j
�dj|j	|��}q*|js*t
jj|j
�d�j|�}q*n|dk	r<|nd|fS(s\
        We should technically only fetch the sequence number from GoalState and not rely on the filesystem at all,
        But there are certain scenarios where we need to fetch the latest sequence number from the filesystem
        (For example when we need to report the status for extensions of previous GS if the current GS is Unsupported).
        Always prioritizing sequence number from extensions but falling back to filesystem
        :param extension: Extension for which the sequence number is required
        :return: Sequence number for the extension, Status file path or -1, None
        s1Sequence number [{0}] does not appear to be validi����s{0}.{1}.statuss
{0}.statusN(R_R_RFRHR�R>RFROR	R[RzR{R|R�RO(R�R�R{R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR^hs	
 *-	*c
Cs�|jjdj|j|���|j|�\}}|dksO|dkrSdSd}d}td|jd|�}y|j|�\}}Wndt	k
r�}d}t
j|_|j
t	jkr�tj|_
dj|j|�|t|��}n�|j
t	jkr>tj|_
dj|j|�|t|��}nN|j
t	jkr�dj|j|�t|��}tj|_
t
j|_ntjtjd	|�td
tjd|j|�d|jjdtjd
td|dt�||_ |SXybt!||�t"|�t#krXt	ddj|j|�||t"|�t#�dt	j$��nWn3t	k
r�}dj|j|�||t|��}tjtj%d	|�td
tjd|j|�d|jjdtjd
td|dt�|j
t	j$kr:|j&|j t'�\|_ }	|j(|j)|	�|_)q�|j
t	j*kr�dj|j|�t|��|_ tj|_
t
j|_q�nX|S(Ns Collect extension status for {0}i����R[R�R�u`We couldn't read any status for {0} extension, for the sequence number {1}. It failed due to {2}u�The status reported by the extension {0}(Sequence number {1}), was in an incorrect format and the agent could not parse it correctly. Failed due to {2}shThis status is being reported by the Guest Agent since no status file was reported by extension {0}: {1}u[PERIODIC] tdeltaR�R�R�R^R�RQs�For Extension Handler {0} for the sequence number {1}, the status file {2} of size {3} bytes is too big. Max Limit allowed is {4} bytesRRupFor Extension Handler {0} for the sequence number {1}, the status file {2}. Encountered the following error: {3}sYCould not get a valid status from the extension {0}. Encountered the following error: {1}(+R�R�RFRR^R_RR[t_read_status_fileRSR;R>RcRRtCouldNotReadStatusFileRtPluginUnknownFailureR�RtInvalidJsonFiletPluginSettingsStatusInvalidt
FileNotExistst
PluginSuccessR<t
periodic_warntEVERY_HALF_HOURRR�R�R
tStatusProcessingR�R^RsR�t_MAX_STATUS_FILE_SIZE_IN_BYTEStMaxSizeExceededt	EVERY_DAYt_truncate_messaget_MAX_STATUS_MESSAGE_LENGTHt_process_substatus_listRkRT(
R�RR�text_status_fileRntdata_strRmR�RQt
field_size((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytcollect_ext_status�sp"!!	
cCs}|j|�\}}|dks-|dkr1dStjj|�sOtj}n*|j|�}|dk	rs|jnd}|S(Ni(	R^R_RzR{R�R;R=RdRc(R�RR�RaRcRm((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytget_ext_handling_status�scCsE|j|�}|dkr%tdfS|tkr;t|fSt|fS(N(ReR_R�t_EXTENSION_TERMINAL_STATUSESR�(R�RRc((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�s

c
Csa|rPtj|�td|j|�d|jjd|d|dtdt�n
tj|�dS(NR[R�R�R^R�R�(R�R�RRR�R�R�R�(R�R`R�R�R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��s

!c	Csg}x�|jD]�}|j|�rU|jtjkrU|j|�tjkrUqny#t�}td|t|��Wnmt	k
r�}dj
|j��}|j|d|ddj
|t
j|���|jd|dd�PnXy8|j|�}|dk	r||_n|j|�Wqtk
r�}d	j
|j|��}|j|d|ddj
|t
j|��d
|�|j|�s�|jdt|�d|j�Pntd|jd|jdtjd
tjd|�}||_|j|�qXqW|S(sM
        Get the list of ExtHandlerStatus objects corresponding to each extension in the Handler. Each object might have
        its own status for the Extension status but the Handler status would be the same for each extension in a Handle
        :return: List of ExtHandlerStatus objects for each extension in the Handler
        RsLSomething went wrong when trying to get a copy of the Handler status for {0}R�R�s{0}.
Stack Trace: {1}R^RRi����s<Unknown error when trying to fetch status from extension {0}R�R[R�RcN(R�R	R�R"R%RBRR	RR�RFRR�R%R�RRdR_textension_statusRlRRRRRR[R_RRSR;R>(	R�R�R`R�Rtext_handler_statusR>RQRm((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�sJ*			cCs|j�}|j�sdStjjtj�|j��}tjj|�s^t	d��n|j
|�s�idd6dd6dd6Sy*tj|�}t
j|�dd	}WnUtk
r�}t	d
j|���n.ttfk
r}t	dj|���nX|S(NsFailed to get heart beat fileR1Rci����RRs%Extension heartbeat is not responsiveR^iR�s Failed to get heartbeat file:{0}sMalformed heartbeat file: {0}(REtis_report_heartbeatRzR{R|R}R~tget_heartbeat_fileR�Rt
is_responsiveR�R�R�R�R�RFRHtKeyError(R�R
theartbeat_filetheartbeat_jsonR�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�?s(cCs,ttj�tj|�j�}|dkS(s�
        Was heartbeat_file updated within the last ten (10) minutes?

        :param heartbeat_file: str
        :return: bool
        iX(RFRRzR�tst_mtime(Rmtlast_update((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRkWs"i,cCs�tjj�}|jjd|�|j�}tjd|dd���}	tjd|dd���}
|dkryi}n|ji|t	j
6t|jj
�t	j6|jj�t	j6|dk	r�t|j�ntt	j6�|j|�r|j|t	j<ng}x>t�j�D]-\}}
|ji|
jd6|
j
d6�qW|rftj|�|t	j<ny�tjj ||j!tjj"��}|jj#dj$|tj|���|jtj%�t&j'�j(d|j)|�d	|d
|d|dt*d
|d|d|	d|
d|�
}Wn4t+k
rP}t,dj$||j-�d|��nXt.|�}|j/|�}dj$|dj g|j0d�D]}|dkr�|^q���}|jj#|�|j1d|d|d|dt2�|SWdQXWdQXdS(NsLaunch command: [{0}]tdirR�sw+btKeytValues6Executing command: {0} with environment variables: {1}RtcommandRRtshelltcwdRtstdouttstderrt
error_codesFailed to launch '{0}': {1}RRsCommand: {0}
{1}s
R�R[R^R�R�(3R�R�R�R�R�ttempfilet
TemporaryFileR_RSRARJR�R�R�RKR�tget_endpointROR_t_DEFAULT_SEQ_NORLR	R[RMRR�RlR�R�RPRzR{R|tlstriptsepR�RFtenvironRRtstart_extension_commandR�R�R�RR�RRtsplitRGR�(R�tcmdRRRRR�R�R<RwRxR�RdR�tcommand_full_pathtprocess_outputR�R�R.tlineR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR!bs`		
)
$

4"cCs�|j�}ytjtj|��}Wnkttfk
rg}tdj||j	�dt
j��n/tk
r�tdj|�dt
j
��nXt|d�S(Ns'Failed to load manifest file ({0}): {1}RRsMalformed manifest file ({0}).i(RR�R�R�R�R�R�RRFR�RtPluginHandlerManifestNotFoundRHt)PluginHandlerManifestDeserializationErrortHandlerManifest(R�R	RnR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRE�s
cCsntjj|j�|�}ytj||�Wn8tk
ri}tj|d|g�td|��nXdS(NR�uFailed to update settings file(	RzR{R|RZR�R�R�RR(R�t
settings_fileR�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytupdate_settings_file�s
cCs|jdks0t|j�dks0|dkr]|jjd�|jdjt�d�dSi|jd6|j	d6|j
d6}ii|d6gd	6}|j|�r�d
j|j|j
�ndj|j
�}|jjd|�|j|tj|��dS(Nis1Extension has no settings, write empty 0.settingss{0}.settingsR�tpublicSettingstprotectedSettingstprotectedSettingsCertThumbprintthandlerSettingstruntimeSettingss{0}.{1}.settingssUpdate settings file: {0}(R�R_R�R�R�R�RFR}R�R�tcertificateThumbprintR	R[R_R�R�(R�R�R�text_settingsR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR7�s0


9cCsi|j�tj6|j�tj6|j�tj6|j�tj6}t	t
j�jr�|j
�|tj<|j
�|tj<ni|jjtj6tjtj6|tj6g}y#tj|j�tj|��WnDtk
r}tj|d|j�|jg�td|��nXdS(NR�u"Failed to save handler environment(R�tHandlerEnvironmentt	logFolderRZtconfigFolderR�tstatusFolderRjt
heartbeatFileRRRRRteventsFolderteventsFolder_previewR�R[t
schemaVersionR�thandlerEnvironmentR�R�tget_env_fileR�R�R�RR�R�R(R�thandler_envRR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�s$
#cCs#|j|�rdj|j�SdS(Ns{0}.HandlerStateR�(R	RFR[(R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__get_handler_state_file_name�scCs |jd|j�d|�dS(NR[tvalue(t_ExtHandlerInstance__set_statet0_ExtHandlerInstance__get_handler_state_file_name(R�Rt((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR<�scCs|jd|j�dtj�S(NR[tdefault(t_ExtHandlerInstance__get_stateR�R�R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR1�scCs#|jd|j|�d|�dS(NR[R�(R�R�(R�R�textension_state((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__set_extension_state�scCs"|jd|j|�dtj�S(NR[R�(R�R�R"R%(R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRBscCs�|j�}tjj||�}y<tjj|�sLtj|dd�ntj||�Wn<tk
r�}tj	|d|g�|j
jd|�nXdS(NR�i�R�sFailed to set state: {0}(RZRzR{R|R�R�R�R�R�RR�R>(R�R[R�t	state_dirt
state_fileR�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__set_statescCsv|j�}tjj||�}tjj|�s7|Sytj|�SWn'tk
rq}|jj	d|�|SXdS(NsFailed to get state: {0}(
RZRzR{R|R�R�R�R�R�R>(R�R[R�R�R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__get_statesc	Cs|jjdj|j��y�tjj|j�dj|j��tjj|j�dj|j��tjj|j�|j	|��g}t
j|�Wnltk
r
}|j
|�}dj|t|��}|jd|d|dtdt�|jj|�nXdS(	Ns1Removing states files for disabled extension: {0}s{0}.*.settingss{0}.*.statuss3Failed to remove extension state files for {0}: {1}R[R^R�R�(R�R�RFR[RzR{R|RZR�R�R�trm_filesR�RRRGR�R�(R�R�tfiles_to_deleteR>RR^((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt__remove_extension_state_filess$$'"c	CsU|j�}t�}|jj|_t|jj�|_||_||_||_|jj	|_	t
jj|d�}y�t
jt|��}|dk	r�t
jj|�s�tj|dd�ntj||�n(|jjdj|jj|jj��WnNtttfk
rP}tj|d|g�|jjdtj|��nXdS(Nt
HandlerStatusR�i�sDFailed to create JSON document of handler status for {0} version {1}R�s"Failed to save handler status: {0}(RZRR�R[R�R�R^RRRcRORzR{R|R�R�RR_R�R�R�R�R�R>RFR�RHRRR%R�(	R�RcR^RRR�R�R�thandler_status_jsonR>((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR,s(				c
Cs|j�}tjj|d�}tjj|�s7dSd}y?tj|�}tj	|�}t
�}td||�|SWn�tt
fk
r�}|jjd|�nktk
r}djt|�|�jdd�}tdtjd	td
tdtjdtd
|��nXdS(NR�R�Rs!Failed to get handler status: {0}sAFailed to get handler status message: {0}.
 Contents of file: {1}t"s'RPR[R�R�R�R^(RZRzR{R|R�R_R�R�R�R�RR	R�RHR�R>R�RFRtreplaceRt
EVERY_HOURR(R)R
R�R�(R�R�R�thandler_status_contentsRnR�R>t	error_msg((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR
Es2			cCsdj|jj|jjt�S(Ns{0}__{1}{2}(RFR�R[R�R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�bs	cCsdj|j|�|jj�S(s�
        :return: <HandlerName>-<HandlerVersion> if extension is None or Handler does not support Multi Config,
        else then return -  <HandlerName>.<ExtensionName>-<HandlerVersion>
        s{0}-{1}(RFRR�R�(R�R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�gscCstjjtj�|j��S(N(RzR{R|R}R~R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�nscCstjj|j�d�S(NRc(RzR{R|R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�qscCstjj|j�d�S(NRv(RzR{R|R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRZtscCstjj|j�t�S(N(RzR{R|R�R(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRwscCstjj|j�d�S(Ns
heartbeat.log(RzR{R|R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRjzscCstjj|j�d�S(NsHandlerManifest.json(RzR{R|R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR}scCstjj|j�tj�S(N(RzR{R|R�R�tfileName(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��scCstjjtj�|jj�S(N(RzR{R|R}tget_ext_log_dirR�R[(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��scCsZtj�}tjd||�dk	rVtjj�tjjtj�d�krVt	St
S(Ns\As%Y-%m-%d(R}t!get_cgroup_monitor_extension_nameR�R�R_R�R�tstrptimetget_cgroup_monitor_expiry_timeR�R�(Rtcgroup_monitor_extension_name((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�s
*cCsed}xXtr`ytj|�SWn-tk
rO|d7}|tkrP�qPnXtjt�q	WdS(Nii(R�R�t _read_and_parse_json_status_fileR�t_NUM_OF_STATUS_FILE_RETRIESRRt_STATUS_FILE_RETRY_DELAY(Rat	err_count((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRQ�s	


cCs�tjj|�s6tddj|�dtj��nytj|�}Wn7tk
r�}tdt	|�d|dtj
��nXytj|�}WnSt
tfk
r�}tddjt	|�t	|�d �d|dtj��nX||fS(NRQsStatus file {0} does not existRRtinners+{0} 
 First 2000 Bytes of status file:
 {1}i�(RzR{R�RSRFRVR�R�R�RRRR�R�RHRJRT(RaRbR�Rn((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��s(cCs�g}x{|D]s}|j|jt�\|_}||7}|j|jt�\|_}||7}|tkr|j|�q
Pq
W|S(N(R^R[t_MAX_SUBSTATUS_FIELD_LENGTHR^R[Rl(R�Rrtcurrent_status_sizetprocessed_substatusReRc((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR`�s


cCsJ|dkrdSt|�|kr(|n|| t}|t|�fSdS(N(R_R�t_TRUNCATED_SUFFIX(tfieldt
truncate_sizettruncated_field((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR^�s&i(i�Ni(i�(VR6R7R_R�tpropertyROR�RPRR�R�R�R!R�RRR4R0R�RQR"R�RGR�R�R=R6R>RRRAR	RR*R�RCR3RTR�RSRUROR^RdReRR
RqR�R�R�RkRtPluginProcessingErrorR!RER�R7RR�R<R1R#RBR�R�R+R5R:RR
R�R�R�R�RZRRjRR�R�RRQR�R`R�R^(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�s�		
$7										0	
	*							&		)	R		
	=	G	
																			R�cBsJeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZRS(g�?sHandlerEnvironment.jsonR�R�R�R�R�R�R�R[R�(
R6R7R�R�R�R�R�R�R�R�R�R[R�(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��sR�cBs}eZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�ZRS(
cCs8|dks|ddkr+td��n||_dS(NthandlerManifestsMalformed manifest file.(R_RRn(R�Rn((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��scCs|jdS(NR[(Rn(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytget_name�scCs|jdS(NR�(Rn(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytget_version�scCs|jddS(NR�tinstallCommand(Rn(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR,�scCs|jddS(NR�tuninstallCommand(Rn(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR3�scCs|jddS(NR�t
updateCommand(Rn(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRA�scCs|jddS(NR�t
enableCommand(Rn(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR �scCs|jddS(NR�tdisableCommand(Rn(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR'�scCs|jdjdt�S(NR�treportHeartbeat(RnR`R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRi�scCs6|jdjd�}|dkr&tS|j�dkS(NR�t
updateModetupdatewithinstall(RnR`R_R�R�(R�tupdate_mode((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRE�scCs|jdjdt�S(NR�tcontinueOnUpdateFailure(RnR`R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRF�scCs|jdjdt�S(NR�tsupportsMultipleExtensions(RnR`R�(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��scCs�tj|�r�t|�td�krbiiidd6dd6gd6d6}t|jdd	��Siiidd6dd6gd6d6}t|jdd	��Snt|jjdd	��S(
s�
        Placeholder values for testing and monitoring the monitor extension resource usage.
        This is not effective after nov 30th.
        s1.12smdsd.serviceR[s/lib/systemd/systemR{tservicestresourceLimitssazuremonitoragent.serviceN(R�RRtResourceLimitsR`R_Rn(R�Rtstr_versionttest_man((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR
	s(R6R7R�R�R�R,R3RAR R'RiRERFR�R
(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR��s												R�cBs,eZd�Zd�Zd�Zd�ZRS(cCs
||_dS(N(Rn(R�Rn((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�$	scCs&|jdk	r"|jjdd�SdS(NtcpuQuota(RnR_R`(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pytget_extension_slice_cpu_quota'	scCs&|jdk	r"|jjdd�SdS(NtmemoryQuota(RnR_R`(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt get_extension_slice_memory_quota,	scCs&|jdk	r"|jjdd�SdS(NR�(RnR_R`(R�((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR1	s(R6R7R�R�R�R(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�#	s			RScBs>eZdZdZdZdZdZdZdddd�Z	RS(	s>
    When extension failed to provide a valid status file
    iiiiii����cCs tt|�j|||�dS(N(tsuperRSR�(R�RQR�RR((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyR�A	sN(
R6R7R8RRRTRTR\RVR_R�(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyRS7	s(R�R�R�R�RzR�R�R�R�RzRR�tdistutils.versionRtcollectionsRt	functoolsRtazurelinuxagent.common.conftcommonR}tazurelinuxagent.common.loggerR�t%azurelinuxagent.common.utils.fileutiltutilsR�tazurelinuxagent.common.versionR�t.azurelinuxagent.common.agent_supported_featureRRRRt)azurelinuxagent.common.cgroupconfiguratorRt#azurelinuxagent.common.datacontractRR	t!azurelinuxagent.common.errorstateR
tazurelinuxagent.common.eventRRR
RRt azurelinuxagent.common.exceptionRRRRRRRRRRtazurelinuxagent.common.futureRRt'azurelinuxagent.common.protocol.restapiRRRRR R!R"R#R$tazurelinuxagent.common.utilsR%t$azurelinuxagent.common.utils.archiveR&t-azurelinuxagent.common.utils.flexible_versionR'R(R)R*R+R,t_HANDLER_NAME_PATTERNt_HANDLER_VERSION_PATTERNt_HANDLER_PATTERNtcompilet
IGNORECASER�Rt_VALID_HANDLER_STATUSR�tHANDLER_COMPLETE_NAME_PATTERNR�R�R�R3R[R_R�R�R�R�R}tobjectR5R;R>R?RfRARXR\RbRfRsR�R�R�R�R�R_R�R�R�R�R�R�RS(((sB/usr/lib/python2.7/site-packages/azurelinuxagent/ga/exthandlers.pyt<module>s�"(F@(

				
	$	)	��������L