2017-08-02 102 views
0

我想用鹽來移動我的php.ini文件,但我只希望它在第一次運行時運行一次。我試圖用鹽粒來做到這一點,但這種做法並不一致。有任何想法嗎?使用grain.present的預期行爲是什麼?

#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 %} 
+0

使用'grains.get',我使用這個語法來指定一個默認值:'salt ['grains.get']('my_grain',False)'。它可以很好地與'grains.get'和'pillar.get'配合使用。爲了您的實際需要,我同意@ gbrandsma的回答。但是'test -f'可以用來代替'ls'。 –

回答

3

使用grain.present的預期行爲是什麼?

這將確保糧食將存在。換一種說法。當它不在時,Ik會做出來。

任何想法?

你想確保php.ini文件只放在你的小爪子上一次。在第一個'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。

我希望這會有所幫助。

+0

問題是我有其他需要更改php.ini文件的狀態。我現在意識到文件需要動態生成。我在處理php的git集線器上找到了一個公式,但我無法弄清楚如何讓它工作。但似乎作者想出瞭如何完成這項工作。 https://github.com/saltstack-formulas/php-formula。我試過默認的支柱和PHP甚至沒有安裝 – pitchblack408