这是一个自我解答的问题。
如果需要,请提供修改,其他观点和意见。
有条件强制执行状态(取决于其他命令输出)的最佳实践是什么?
这是我的情况:
# 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的情况下运行此程序。
答案 0 :(得分:0)
一种解决方法是使用salt.states.cmd.run的onlyif
参数:
# 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
取决于要测试的命令的返回状态代码,因此,如果需要更大的灵活性,则可能不是您所需要的。
另一种方法是使用jinja模板访问执行模块,并在以下条件下包装状态:
{% if salt.selinux.getenforce() == "Disabled" %}
httpd:selinux:
...
{% endif %}
这是一种更灵活的解决方案,但也会占用更多空间。
有关更多信息:salt.modules.selinux.getenforce()