salt-stack - 如何断言 mine.get 返回非空结果?
问题描述
我们使用 Salt Mine 来发现符合特定条件的其他 minions,以构建配置文件。但是,由于各种原因,通常是在一个级别或另一个级别进行缓存,或者 minions 没有连接到 master,结果mine.get
可能是错误的。最明显的错误结果是空结果,即没有小兵与tgt
参数匹配。如果结果为空,是否有可能导致 salt 无法运行状态(state.highstate
或state.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 个结果则失败)。
解决方案
推荐阅读
- amazon-web-services - 使用 --follow 选项查看 AWS Cloudwatch 日志时如何减少缓冲/导致自动刷新
- movesense - Simulator 中的 ECG 数据与 CSV 提供的不同
- node.js - 'REACT_APP_VERSION' 不是内部或外部命令、可运行程序或批处理文件
- excel - 如何限制整个列的剪切复制过去选项
- node.js - 设置辅助冗余故障转移 Node.JS 服务器
- flask - 从烧瓶上传到亚马逊 s3 的文件显示大小为 0B,无法打开文件
- java - java中的LinkedHashMap如何在已有节点的同一数组索引中添加节点?
- python - Python读取文件方法内存?
- http - HTTP 400:未声明纯文本文档的字符编码
- scala - 没有类型的隐式参数:任何