salt-stack - 是否有退出状态执行的本机方式?
问题描述
这是场景。当 osarch 等于 x86 时做某事,当它等于 aarch64 时再做另一件事,否则退出状态执行。那么有没有像 Ansible 中的“meta: end_play”这样的方法,以便我可以将它放入 {% else %} 部分以在不满足条件时退出?
{% if grains['osarch'] == 'aarch64' %}
plan A:
cmd.run:
- name: echo a
{% elif grains['osarch'] == 'x86' %}
plan B:
cmd.run:
- name: echo b
{% else %}
HOW TO QUIT THE STATE???
{% endif %}
解决方案
因此,该else
部分不是强制性的。如果条件都不匹配,则无论如何都不会执行任何操作。
从您的代码:
- 如果
osarch
匹配aarch64
,则Plan A
执行。 - 如果
osarch
匹配x86
,则Plan B
执行。 - 如果
osarch
不是以上任何一个,则不采取任何措施。
因此,当条件不匹配时停止执行的“优雅”方式是:
{% if grains['osarch'] == 'aarch64' %}
plan-A:
cmd.run:
- name: echo a
{% elif grains['osarch'] == 'x86' %}
plan-B:
cmd.run:
- name: echo b
{% endif %}
但是,如果您确实想通知用户您希望osarch
匹配某些东西,但它没有。然后你可以使用 Saltstack测试状态模块。它有一个名为fail_without_changes
. 如果没有任何条件匹配,我们可以使用它来引发异常(并使运行失败)。
例子:
{% if grains['osarch'] == 'aarch64' %}
plan-A:
cmd.run:
- name: echo a
{% elif grains['osarch'] == 'x86' %}
plan-B:
cmd.run:
- name: echo b
{% else %}
fail-the-run:
test.fail_without_changes:
- name: OS arch not matched, bailing out.
- failhard: True
{% endif %}
failhard
这里需要,因为 Saltstack 中的默认行为是运行所有状态。但是如果我们需要停止执行,我们需要添加这个选项。
请注意,这与fail
Ansible 中的相似性大于meta: end_play
.
推荐阅读
- sql - 如何识别不符合特定标准的组?
- ios - 应用程序因 UIApplicationEndBackgroundTaskError 而崩溃
- php - 生产环境连接数据库出错
- c - 在调用 execve() 时,环境的各个方面基于什么保持?
- java - 在 Java 中实例化内部类是如何真正起作用的?
- amazon-web-services - AWS Glue 无法从爬虫创建数据库:权限被拒绝
- amazon-ec2 - 以编程方式安装作曲家,适用于 vagrant 但不适用于 EC2 实例
- c# - 访问作为对象 C# 中的字段的对象的字段
- xml - Spark-xml 在读取处理指令时崩溃
- android-studio - 如何禁用 Android Studio“Gradle 调用完成”通知?