使用grain.present的预期行为是什么?

时间:2017-08-02 18:11:38

标签: salt salt-stack

我正在尝试使用salt来移动我的php.ini文件,但我只希望它在第一次运行时运行一次。我正在尝试使用盐粒来做到这一点,但这种做法并不一致。有什么想法吗?

#phpinifile.sls
{%- set php_ini_initialized = salt['grains.get']('PHP_INI_INITIALIZED') | default( False, true) %}

{% if php_ini_initialized == False %}
etc-php-70-cli-phpini:
file.managed:
    - name: /etc/php/7.0/cli/php.ini
    - source: salt://billing/sources/etc/php/7.0/cli/php.ini
    - user: root
    - group: root
    - mode: 644
    - context:
      set_pear_path: True
    - template: jinja


PHP_INI_INITIALIZED:
  grains.present:
    - value: True
{% endif %}

1 个答案:

答案 0 :(得分:3)

使用grain.present的预期行为是什么?

确保谷物存在。换一种说法。当它不存在时,Ik会成功。

有什么想法吗?

你想确保php.ini文件只放在你的minion上一次。在第一个州.apply'

期间

file.managed将确保您的文件存在,具有正确的权限和正确的内容。 当您执行另一个state.apply时,Salt将看到该文件已经具有正确的内容并继续运行。在这种情况下,您可以根据需要多次运行它而不会出现问题。

如果您的php.ini文件在被Salt放置后手动更改我明白您要确保只运行一次。在这种情况下,您可以使用unless这样的必要条件:

phpini:
file.managed:
    - name: /etc/php/7.0/cli/php.ini
    - source: salt://billing/sources/etc/php/7.0/cli/php.ini
    - unless: ls /etc/php/7.0/cli/php.ini

unless必备条件指定只有在任何指定的命令返回False时才运行状态。在这种情况下,如果文件不存在,ls将返回false。

我希望这会有所帮助。