HEX
Server: Apache
System: Linux 185.122.168.184.host.secureserver.net 5.14.0-570.60.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Nov 5 05:00:59 EST 2025 x86_64
User: barbeatleanalyti (1024)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/lib/python3.9/site-packages/sos/collector/clusters/__pycache__/pacemaker.cpython-39.pyc
a

\��h>�@s@ddlZddlmZddlmZddlmZGdd�de�ZdS)�N)�ElementTree)�Cluster)�sos_parse_versionc@sFeZdZdZdgZdZdZgd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
S)�	pacemakerz+Pacemaker High Availability Cluster Manager)rT))�onlineTzCollect nodes listed as online)�offlineTzCollect nodes listed as offline)�
only-corosyncFz)Only use corosync.conf to enumerate nodesc
Cs�g|_z^|�d�sTz|��Wn4tyR}z|�d|���WYd}~n
d}~00|jsb|��Wn4ty�}z|�d|���WYd}~n
d}~00dd�|jD�}|r�|�dd�|��d��|jS)	NrzHFalling back to sourcing corosync.conf. Could not parse crm_mon output: z(Could not determine nodes from cluster: cSsg|]}d|vr|�qS)�.�)�.0�nr
r
�D/usr/lib/python3.9/site-packages/sos/collector/clusters/pacemaker.py�
<listcomp>/�z'pacemaker.get_nodes.<locals>.<listcomp>zWARNING: Node addresses '�,z�' may not resolve locally if you are not running on a node in the cluster. Try using option '-c pacemaker.only-corosync' if these connections fail.)�nodes�
get_option�get_nodes_from_crm�	Exception�log_warn�get_nodes_from_corosyncZ	log_error�join)�self�errZ_shortsr
r
r
�	get_nodess&
�&�zpacemaker.get_nodescCs�d}|�d�}|ddkrJ|d��d�d�d}t|�td�krNd	}nd
S|jd|��dd
�}|ddkr||�|d�d
S)zG
        Try to parse crm_mon output for node list and status.
        z--output-as=xmlzcrm_mon --version�statusr�output��-z2.0.3z--as-xmlNzcrm_mon --one-shot --inactive T)Z	need_root)Zexec_primary_cmd�splitr�
parse_crm_xml)rZxmloptZ_verZcverZ_outr
r
r
r9s
�zpacemaker.get_nodes_from_crmcCsvt�|�}|�d�}|D]X}|j}|�d�rJ|ddkrJ|j�|d�q|�d�r|ddkr|j�|d�qdS)zA
        Parse the xml output string provided by crm_mon
        rr�true�namerZfalseN)rZ
fromstring�findZattribrr�append)rZ	xmlstringZ_xmlr�nodeZ_noder
r
r
r Ms

zpacemaker.parse_crm_xmlcCsD|�d�|j�d�}t�d|�}|D]}|j�|d���q&dS)z�
        As a fallback measure, read corosync.conf to get the node list. Note
        that this prevents us from separating online nodes from offline nodes.
        z_WARNING: unable to distinguish online nodes from offline nodes when sourcing from corosync.confz/etc/corosync/corosync.confz((\sring0_addr:)(.*))���N)rZprimaryZ	read_file�re�findallrr$�strip)rZccrr%r
r
r
rZs

z!pacemaker.get_nodes_from_corosyncN)�__name__�
__module__�__qualname__Zcluster_nameZsos_pluginsZpackagesZstrict_node_listZoption_listrrr rr
r
r
r
rs
r)r'Z	xml.etreerZsos.collector.clustersrZ
sos.utilitiesrrr
r
r
r
�<module>s