if-statement - SaltStack - 如何有条件地执行状态?
问题描述
这是一个自我回答的问题。
如果需要,请提供编辑、额外的观点和输入。
有条件地执行状态的最佳实践是什么(取决于其他命令输出)?
这是我的情况:
# vim: set syntax=yaml:
# Ensures that outbound connections are allowed for httpd
httpd:selinux:
cmd.run:
- name: /usr/sbin/setsebool -P httpd_can_network_connect 1
现在,我只想在启用(强制)SELinux 的情况下运行它。
解决方案
1)
解决它的一种方法是使用salt.states.cmd.runonlyif
的参数:
# Ensures that outbound connections are allowed for httpd
httpd:selinux:
cmd.run:
- name: /usr/sbin/setsebool -P httpd_can_network_connect 1
- onlyif:
- 'if [[ $(getenforce) == "Disabled" ]]; then exit 1; else exit 0; fi' # if SELinux is disabled, then don't enforce this state
这是解决这个问题的一种非常快速和简单的方法,并且当我们在这个例子中处理 Shell 命令时,它可能是最可取的方法。
请注意,这onlyif
取决于正在测试的命令的返回状态代码,因此如果需要更大的灵活性,那么这可能不是您想要的。
2)
另一种方法是使用 jinja 模板访问执行模块,将您的状态包装在以下条件中:
{% if salt.selinux.getenforce() == "Disabled" %}
httpd:selinux:
...
{% endif %}
这是一个更灵活的解决方案,但也占用了更多空间。
更多信息:salt.modules.selinux.getenforce()
推荐阅读
- python - Pipenv 安装开发包在其他窗口不可用
- php - 如何使用 SparkPost PHP API 一次性发送多封电子邮件?
- anaconda - 如何摆脱“设置”JAVA_HOME_CONDA_BACKUP="“消息?
- powershell - 在远程计算机上禁用开发模式
- javascript - 如何按年龄值对数据进行排序?
- string - 提取两个字符串之间的字符串
- python - 我正在尝试导入 selenium webdriver,使用 Python IDLE 3.7 64bit 编写脚本:我使用的命令是“from selenium import webdriver”
- cordova-plugins - Cordova 隐藏应用程序的背景
- .net - 非常有效地从 Azure Blob 引导文件
- javascript - SweetAlert2 Typescript Webpack 构建错误