首页 > 解决方案 > 如何断言 mine.get 返回非空结果?

问题描述

我们使用 Salt Mine 来发现符合特定条件的其他 minions,以构建配置文件。但是,由于各种原因,通常是在一个级别或另一个级别进行缓存,或者 minions 没有连接到 master,结果mine.get可能是错误的。最明显的错误结果是空结果,即没有小兵与tgt参数匹配。如果结果为空,是否有可能导致 salt 无法运行状态(state.highstatestate.sls) ?mine.get

例如,考虑一个以 Jinja 为模板的配置文件(例如 Apache ZooKeeper):

# ...
{% set master_nodes = salt['mine.get']('roles:master', 'network.get_hostname', tgt_type='grain').values() | sort -%}
{% for master_node in master_nodes -%}
server.{{ loop.index }}={{ master_node }}:2888:3888
{% endif -%}

如果mine.get调用不匹配任何仆从,那么master_nodes将是一个空列表,因此server配置文件中不会出现任何行。我宁愿让状态无法运行,也不愿默默地创建无用的配置。更好的方法是将结果数与支柱值匹配(例如,支柱表示有 3 个主控,如果mine.get返回多于或少于 3 个结果则失败)。

标签: salt-stack

解决方案


推荐阅读