Ë
    i©¹d:  ã                   óF   — d dl Z d dlmZ d dlmZ d dlmZ  G d„ de«      Zy)é    N)ÚCluster)Úparse_version)ÚElementTreec                   ó>   — e Zd ZdZd gZdZdZg d¢Zd„ Zd„ Z	d„ Z
d„ Zy	)
Ú	pacemakerz+Pacemaker High Availability Cluster Manager)r   T))ÚonlineTzCollect nodes listed as online)ÚofflineTzCollect nodes listed as offline)úonly-corosyncFz)Only use corosync.conf to enumerate nodesc                 óÞ  — g | _         	 | j                  d«      s	 | j                  «        | j                   s| j                  «        | j                   D �cg c]	  }d|vsŒ|‘Œ }}|r#| j	                  ddj                  |«      z  «       | j                   S # t        $ r}| j	                  d|z  «       Y d }~Œ�d }~ww xY w# t        $ r}| j                  d|z  «       Y d }~Œ›d }~ww xY wc c}w )Nr
   zJFalling back to sourcing corosync.conf. Could not parse crm_mon output: %sz*Could not determine nodes from cluster: %sú.z®WARNING: Node addresses '%s' 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_corosyncÚ	log_errorÚjoin)ÚselfÚerrÚnÚ_shortss       úB/usr/lib/python3/dist-packages/sos/collector/clusters/pacemaker.pyÚ	get_nodeszpacemaker.get_nodes   sù   € ØˆŒ
ð	OØ—?‘? ?Ô3ðNØ×+Ñ+Ô-ð —:’:ð ×,Ñ,Ô.ð #Ÿj™jÖ9˜¨C°qªL’1Ð9ˆÐ9ÙØ�M‰MðJð —(‘(˜7Ó#ñ$ôð �z‰zÐøô% !ò NØ—M‘Mð #GØILñ#M÷ Nñ NûðNûô ò 	OØ�N‰NÐGÈ#ÑM×NÑNûð	Oüò :sK   ‰C  ›B «C  Á	C*ÁC*Â	B=ÂB8Â3C  Â8B=Â=C  Ã 	C'Ã	C"Ã"C'c                 ó&  — d}| j                  d«      }|d   dk(  rB|d   j                  «       d   j                  d«      d   }t        |«      t        d«      kD  sd	}ny
| j                  d|z  d¬«      }|d   dk(  r| j                  |d   «       y
y
)zG
        Try to parse crm_mon output for node list and status.
        z--output-as=xmlzcrm_mon --versionÚstatusr   Úoutputé   ú-z2.0.3z--as-xmlNz crm_mon --one-shot --inactive %sT)Ú	need_root)Úexec_primary_cmdÚsplitr   Úparse_crm_xml)r   ÚxmloptÚ_verÚcverÚ_outs        r   r   zpacemaker.get_nodes_from_crm9   s¬   € ð #ˆà×$Ñ$Ð%8Ó9ˆØ�‰>˜QÒØ˜‘>×'Ñ'Ó)¨!Ñ,×2Ñ2°3Ó7¸Ñ:ˆDÜ  Ó&¬°wÓ)?Ò?Ø#‘àØ×$Ñ$Ø.°Ñ7Øð %ó 
ˆð �‰>˜QÒØ×Ñ˜t H™~Õ.ð ó    c                 óX  — t        j                  |«      }|j                  d«      }|D ]  }|j                  }| j	                  d«      r'|d   dk(  r| j
                  j                  |d   «       ŒG| j	                  d«      sŒY|d   dk(  sŒb| j
                  j                  |d   «       Œ� y)zA
        Parse the xml output string provided by crm_mon
        r   r   ÚtrueÚnamer	   ÚfalseN)r   Ú
fromstringÚfindÚattribr   r   Úappend)r   Ú	xmlstringÚ_xmlr   ÚnodeÚ_nodes         r   r$   zpacemaker.parse_crm_xmlM   s”   € ô ×%Ñ% iÓ0ˆØ—	‘	˜'Ó"ˆØò 	1ˆDØ—K‘KˆEØ�‰˜xÔ(¨U°8©_ÀÒ-FØ—
‘
×!Ñ! %¨¡-Õ0Ø—‘ Õ+°°h±À7Ó0JØ—
‘
×!Ñ! %¨¡-Õ0ñ	1r)   c                 óî   — | j                  d«       | j                  j                  d«      }t        j                  d|«      }|D ].  }| j
                  j                  |d   j                  «       «       Œ0 y)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)r   ÚprimaryÚ	read_fileÚreÚfindallr   r1   Ústrip)r   Úccr   r4   s       r   r   z!pacemaker.get_nodes_from_corosyncZ   si   € ð
 	�‰ð Gô 	Hà�\‰\×#Ñ#Ð$AÓBˆÜ—
‘
Ð3°RÓ8ˆØò 	0ˆDØ�J‰J×Ñ˜d 2™hŸn™nÓ.Õ/ñ	0r)   N)Ú__name__Ú
__module__Ú__qualname__Úcluster_nameÚsos_pluginsÚpackagesÚstrict_node_listÚoption_listr   r   r$   r   © r)   r   r   r      s4   „ à@€LØ�-€KØ€HØÐò€Kòò6/ò(1ó
0r)   r   )r:   Úsos.collector.clustersr   Úsos.utilitiesr   Ú	xml.etreer   r   rF   r)   r   ú<module>rJ      s!   ðó 
å *Ý 'Ý !ôR0�õ R0r)   