o
    O6uf?  ã                   @   sz   d dl Z d dlmZmZ d dlmZmZmZmZmZ d dl	m
Z
 G dd„ deƒZG dd„ deeeƒZG d	d
„ d
eeƒZdS )é    N)ÚdatetimeÚ	timedelta)ÚPluginÚRedHatPluginÚDebianPluginÚUbuntuPluginÚ	PluginOpt)Úsos_parse_versionc                   @   sn   e Zd ZdZdZdZdZeddedd�ed	d
dd�gZ	dZ
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	Pacemakerz4Pacemaker high-availability cluster resource managerÚ	pacemaker)Úcluster)r   zpacemaker-remoteúcrm-fromÚ z%specfiy the start time for crm_report)ÚdefaultÚval_typeÚdescú	crm-scrubTz$enable crm_report password scrubbing)r   r   c                 C   s   |   d¡ dS )z Get cluster summary zcrm_mon -1 -A -n -r -tN©Úadd_cmd_output©Úself© r   ú>/usr/lib/python3/dist-packages/sos/report/plugins/pacemaker.pyÚsetup_crm_mon$   s   zPacemaker.setup_crm_monc                 C   s   |   ddg¡ dS )z& Get cluster status and configuration z
crm statusúcrm configure showNr   r   r   r   r   Úsetup_crm_shell(   s   
þzPacemaker.setup_crm_shellc                 C   s”   | j j d¡}|du rdS |  d¡ |  g d¢¡ d |d ¡}t|ƒtdƒkr.|  d¡ n|  d	¡ | jd
dd� | jddd� | jddd� dS )z& Get pacemaker/corosync configuration ÚpcsNz/var/log/pcsd/pcsd.log)zpcs stonith sbd status --fullzpcs stonith sbd watchdog listzpcs stonith history showÚ.Úversionz0.10.8zpcs property config --allzpcs property list --allú
pcs configÚ
pcs_config)Útagszpcs quorum statusÚpcs_quorum_statuszpcs status --fullÚ
pcs_status)ÚpolicyÚpackage_managerÚpkg_by_nameÚadd_copy_specr   Újoinr	   )r   Úpcs_pkgÚpcs_versionr   r   r   Ú	setup_pcs/   s   

zPacemaker.setup_pcsc                 C   ó   |   ddd¡ dS )ú Clear password r   úpassw([^\s=]*)=\S+úpassw\1=********N©Údo_cmd_output_subr   r   r   r   Úpostproc_crm_shellF   ó
   ýzPacemaker.postproc_crm_shellc                 C   r,   )r-   r   r.   r/   Nr0   r   r   r   r   Úpostproc_pcsN   r3   zPacemaker.postproc_pcsc           	      C   sn  |   g d¢¡ |  ¡  t ¡ tdd�  d¡}|  d¡r9t dt	|  d¡ƒ¡r-|  d¡}n|  
d|  d¡› d�¡ | jd	d
d�}|  d¡rHd}nd}|  d¡ |  d¡ | jd|› d|› d|› d�|  ¡ d� d}|  | j¡rµ|   | j¡ t| jddd��.}|D ]"}t ||¡r¢t ||¡ d¡}dD ]	}t |d|¡}q“|   |¡ q€W d   ƒ d S 1 s®w   Y  d S d S )N)z!/var/log/pacemaker/pacemaker.log*ú/var/log/pacemaker/bundles/*/z/var/log/pacemaker/pengine*z/var/log/pacemaker.logr5   z/var/log/cluster/pacemaker.log*z/var/log/cluster/bundles/*/éH   )Úhoursz%Y-%m-%d %H:%m:%Sr   z#\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}zcrm_from parameter 'z$' is not a valid date: using defaultÚ
crm_reportF)ÚnameÚmaker   z-p "passw.*"r   z-scrubbing of crm passwords has been disabled:z:data collected by crm_report may contain sensitive values.zcrm_report --sos-mode z -S -d  --dest z	 --from "ú")Úchrootz0^\s*PCMK_logfile=[\'\"]?(\S+)[\'\"]?\s*(\s#.*)?$ÚrzUTF-8)Úencodingé   )z^"z"$z^\'z\'$)r'   r   r   Útodayr   ÚstrftimeÚ
get_optionÚreÚmatchÚstrÚ
_log_errorÚget_cmd_output_pathÚ	_log_warnr   Útmp_in_sysrootÚpath_isfileÚenvfileÚopenÚsearchÚgroupÚsub)	r   Úcrm_fromÚcrm_destÚ	crm_scrubÚpatternÚfileÚlineÚlogfileÚregexpr   r   r   ÚsetupV   sT   ÿÿ
ÿÿ


ÿÿþ
€ù"ÿþzPacemaker.setupN)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesÚpackagesr   rE   Úoption_listrK   r   r   r+   r2   r4   rX   r   r   r   r   r
      s&    ÿÿýr
   c                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚDebianPacemakerc                    s*   |   d¡| _|  ¡  |  ¡  tƒ  ¡  d S )Nz/etc/default/pacemaker)Ú	path_joinrK   r   r+   ÚsuperrX   r   ©Ú	__class__r   r   rX   “   s   zDebianPacemaker.setupc                 C   s   |   ¡  |  ¡  d S ©N)r2   r4   r   r   r   r   Úpostproc™   s   zDebianPacemaker.postproc©rY   rZ   r[   rX   rh   Ú__classcell__r   r   re   r   rb   ’   ó    rb   c                       ra   )ÚRedHatPacemakerc                    s,   |   d¡| _|  ¡  |  d¡ tƒ  ¡  d S )Nz/etc/sysconfig/pacemakerz/etc/sysconfig/sbd)rc   rK   r+   r'   rd   rX   r   re   r   r   rX   Ÿ   s   
zRedHatPacemaker.setupc                 C   s   |   ¡  d S rg   )r4   r   r   r   r   rh   ¥   s   zRedHatPacemaker.postprocri   r   r   re   r   rl   ž   rk   rl   )rC   r   r   Úsos.report.pluginsr   r   r   r   r   Úsos.utilitiesr	   r
   rb   rl   r   r   r   r   Ú<module>   s    