【问题标题】:What is the expected behavior of using grain.present?使用grain.present 的预期行为是什么?
【发布时间】:2017-08-03 05:09:53
【问题描述】:

我正在尝试使用 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 %}

【问题讨论】:

  • 对于grains.get,我使用这个语法来指定一个默认值:salt['grains.get']('my_grain', False)。它适用于grains.getpillar.get。对于您的实际需要,我同意@gbrandsma 的回答。不过,test -f 可以代替 ls

标签: salt salt-stack


【解决方案1】:

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

它将确保谷物存在。换句话说。当它不存在时,Ik 会成功。

有什么想法吗?

您要确保 php.ini 文件只放置在您的 minion 上一次。在第一个“state.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。

我希望这会有所帮助。

【讨论】:

  • 问题是我还有其他需要更改 php.ini 文件的状态。我现在意识到需要动态生成文件。我在 git hub 上找到了一个处理 php 的公式,但我不知道如何让它工作。但似乎作者想出了如何完成这项工作。 github.com/saltstack-formulas/php-formula。我尝试了默认的支柱和php甚至没有安装
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 2021-10-15
  • 2016-11-12
相关资源
最近更新 更多