o
    O6ufp  ã                   @   s4   d dl Z d dlmZ d dlmZ G dd„ deƒZdS )é    N)Úquote)ÚClusterc                   @   sl   e Zd ZdZdZdZdgZdZg d¢ZdZ	dZ
d	ed
efdd„Zded
efdd„Zd
efdd„Zdd„ ZdS )Ú	saltstackzh
    The saltstack cluster profile is intended to be used on saltstack
    clusters (Salt Project).
    Ú	Saltstack)zsalt-masterÚ
saltmasterT))ÚcompoundÚ z+Filter node list to those matching compound)Úglobr   z/Filter node list to those matching glob pattern)Úgrainr   z-Filter node list to those with matching grain)Úminion_id_unresolvableFz\Returns the FQDN grain of each minion in the node list when the minion ID is not a hostname.)Ú	nodegroupr   z,Filter node list to those matching nodegroup)Úpillarr   z.Filter node list to those with matching pillar)Úsubnetr   z#Filter node list to those in subnetFz#salt-run --out=pprint manage.statusÚoutputÚreturnc                 C   s6   g }t  | dd¡¡}| ¡ D ]	\}}| |¡ q|S )Nú'ú")ÚjsonÚloadsÚreplaceÚitemsÚextend)Úselfr   ÚnodesÚsalt_json_outputÚ_Úvalue© r   úB/usr/lib/python3/dist-packages/sos/collector/clusters/saltstack.pyÚ_parse_manage_status(   s
   zsaltstack._parse_manage_statusÚmanage_statusc                 C   sn   g }|  ¡ D ].\}}|dkr|  d|› d�¡ | |¡ q|D ]}d|› d�}| |  |¡d  ¡ ¡ qq|S )NÚdownzNode(s) z are status down.zsalt --out=newline_values_only z grains.get fqdnr   )r   Úlog_warnr   ÚappendÚexec_primary_cmdÚstrip)r   r    Ú	hostnamesÚstatusÚminionsÚminionÚnode_cmdr   r   r   Ú_get_hostnames_from_grain/   s   
ÿÿûz#saltstack._get_hostnames_from_grainc                 C   sX   |   | j¡}|d dkrtdƒ‚|  d¡r%t |d  dd¡¡}|  |¡S |  |d ¡S )Nr'   r   z-Node enumeration did not return usable outputr   r   r   r   )	r$   r*   Ú	ExceptionÚ
get_optionr   r   r   r+   r   )r   Úresr'   r   r   r   Ú
_get_nodes@   s   

zsaltstack._get_nodesc                 C   s^   | j D ]'}|d dkr*|  |d ¡}|r*|  jdt|ƒ› d|d › �7  _ |  ¡ S q|  ¡ S )Nr   r   z tgt=z
 tgt_type=)Úoption_listr-   r*   r   r/   )r   ÚoptionÚoptr   r   r   Ú	get_nodesI   s   
"€ zsaltstack.get_nodesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úcluster_nameÚpackagesÚsos_pluginsÚstrict_node_listr0   Útargetedr*   ÚstrÚlistr   Údictr+   r/   r3   r   r   r   r   r      s    
	r   )r   Úshlexr   Úsos.collector.clustersr   r   r   r   r   r   Ú<module>   s   
