SaltStack-如何有条件地强制执行状态?

时间:2018-08-30 13:51:12

标签: if-statement conditional-statements salt-stack

这是一个自我解答的问题。
如果需要,请提供修改,其他观点和意见。

有条件强制执行状态(取决于其他命令输出)的最佳实践是什么?

这是我的情况:

# 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 个答案:

答案 0 :(得分:0)

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()