
    -_gp                     :    d dl Z d dlmZ d dlmZ  G d de      Zy)    N)quote)Clusterc                   d    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Zded
efdZd
efdZd Zy)	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                     g }t        j                  |j                  dd            }|j                         D ]  \  }}|j	                  |        |S )N'")jsonloadsreplaceitemsextend)selfr   nodessalt_json_output_values         B/usr/lib/python3/dist-packages/sos/collector/clusters/saltstack.py_parse_manage_statuszsaltstack._parse_manage_status(   sN    ::fnnS#&>?(..0 	 HAuLL	     manage_statusc                    g }|j                         D ]o  \  }}|dk(  r'| j                  d| d       |j                  |       2|D ]9  }d| d}|j                  | j	                  |      d   j                                ; 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_cmds          r    _get_hostnames_from_grainz#saltstack._get_hostnames_from_grain/   s    	,224 	OFG	1BCD  )% F9& B* +  $$--h7AGGI	 r"   c                    | j                  | j                        }|d   dk7  rt        d      | j                  d      r9t	        j
                  |d   j                  dd            }| j                  |      S | j                  |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+   s      r    
_get_nodeszsaltstack._get_nodes@   s    ##DMM2x=AKLL??34ZZH 5 5c3 ?@F11&99((X77r"   c                     | j                   D ]Y  }|d   dk7  s| j                  |d         }|s#| xj                  dt        |       d|d    z  c_         | j	                         S  | j	                         S )Nr   r   z tgt=z
 tgt_type=)option_listr2   r.   r   r4   )r   optionopts      r    	get_nodeszsaltstack.get_nodesI   s{    && 	Fay44oofQi0MMuU3ZL
6!9+%NNM  	   r"   N)__name__
__module____qualname____doc__cluster_namepackagessos_pluginsstrict_node_listr6   targetedr.   strlistr!   dictr/   r4   r9    r"   r    r   r      sj    
 LH.K	K H4H3 4 t  "8D 8!r"   r   )r   shlexr   sos.collector.clustersr   r   rF   r"   r    <module>rI      s      *A! A!r"   