3 ܓip @s4ddlZddlmZddlmZGdddeZdS)N)quote)Clusterc @sreZdZdZdZd#ZdgZdZd$d%d&d'd(d)d*gZdZ dZ e e dddZ ee dddZe dddZd d!Zd"S)+ saltstackzh The saltstack cluster profile is intended to be used on saltstack clusters (Salt Project). Z Saltstack salt-masterZ saltmasterTcompound+Filter node list to those matching compoundglob/Filter node list to those matching glob patterngrain-Filter node list to those with matching grainminion_id_unresolvableF\Returns the FQDN grain of each minion in the node list when the minion ID is not a hostname. nodegroup,Filter node list to those matching nodegrouppillar.Filter node list to those with matching pillarsubnet#Filter node list to those in subnetz#salt-run --out=pprint manage.status)outputreturncCs:g}tj|jdd}x|jD]\}}|j|q W|S)N'")jsonloadsreplaceitemsextend)selfrZnodesZsalt_json_output_valuer!/usr/lib/python3.6/saltstack.py_parse_manage_status(s zsaltstack._parse_manage_status) manage_statusrcCsvg}xl|jD]`\}}|dkr<|jd|d|j|qx0|D](}d|d}|j|j|djqBWqW|S)NZdownzNode(s) z are status down.zsalt --out=newline_values_only z grains.get fqdnr)rZlog_warnrappendexec_primary_cmdstrip)rr$Z hostnamesstatusZminionsZminionnode_cmdr!r!r"_get_hostnames_from_grain/s   z#saltstack._get_hostnames_from_grain)rcCsX|j|j}|ddkr td|jdrJtj|djdd}|j|S|j|dS)Nr(rz-Node enumeration did not return usable outputr rrr) r&r) Exception get_optionrrrr*r#)rresr(r!r!r" _get_nodes@s    zsaltstack._get_nodescCsZxP|jD]F}|ddkr|j|d}|r|jdt|d|d7_PqW|jS)Nrr z tgt=z tgt_type=) option_listr,r)rr.)rZoptionoptr!r!r" get_nodesIs  "zsaltstack.get_nodesN)r)rrr)r rr )r rr )r Fr)rrr)rrr)rrr)__name__ __module__ __qualname____doc__Z cluster_nameZpackagesZ sos_pluginsZstrict_node_listr/Ztargetedr)strlistr#dictr*r.r1r!r!r!r"rs$ r)rZshlexrZsos.collector.clustersrrr!r!r!r" s