saltstack狀態判斷unless與onlyif

很多時候我們在編寫 state 文件時候需要進行判斷,判斷該目錄或文件是否存在,判斷該配置是否已經已添加,然後根據判斷結果再決定命令或動作是否執行,這時候就需要用到了狀態判斷的unlessonlyif

unless

unless示例:需求創建/tmp/unless.txt文件,存在則不創建,不存在則創建

 

[root@salt-master ~]# cat /home/salt/unless.sls 
test-unless:
  cmd.run:
    - name: touch /tmp/unless.txt
    - unless: test -f /tmp/unless.txt


[root@salt-master ~]# salt 'salt-minion01' state.sls unless
salt-minion01:
----------
          ID: test-unless
    Function: cmd.run
        Name: touch /tmp/unless.txt
      Result: True
     Comment: Command "touch /tmp/unless.txt" run
     Started: 15:10:51.522319
    Duration: 31.822 ms
     Changes:   
              ----------
              pid:
                  6538
              retcode:
                  0
              stderr:
              stdout:

Summary for salt-minion01
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  31.822 ms
#上面第一次執行,可以看到發生了一次更改,創建了 /tmp/unless.txt文件


[root@salt-master ~]# salt 'salt-minion01' state.sls unless 
salt-minion01:
----------
          ID: test-unless
    Function: cmd.run
        Name: touch /tmp/unless.txt
      Result: True
     Comment: unless condition is true
     Started: 15:11:40.819789
    Duration: 10.477 ms
     Changes:   

Summary for salt-minion01
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time:  10.477 ms
#第二次執行,可以看到該文件已經存在,並沒有再次創建

 

通過上面的小案例可以看出,當unless返回爲真則不執行,當unless返回爲假才執行。

 

onlyif

onlyif正好和unless相反,當onlyif返回爲真執行,當onlyif返回爲假不執行

onlyif示例:需求,當/tmp/onlyif.txt文件存在,則創建/tmp/onlyif目錄,不存在,則不創建/tmp/onlyif目錄

[root@salt-master ~]# cat /home/salt/onlyif.sls 
test-onlyif:
  cmd.run:
    - name: mkdir /tmp/onlyif
    - onlyif: test -f /tmp/onlyif.txt


[root@salt-master ~]# salt 'salt-minion01' state.sls onlyif 
salt-minion01:
----------
          ID: test-onlyif
    Function: cmd.run
        Name: mkdir /tmp/onlyif
      Result: True
     Comment: onlyif condition is false
     Started: 15:34:56.460583
    Duration: 9.612 ms
     Changes:   

Summary for salt-minion01
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time:   9.612 ms

#通過上面可以看到,由於/tmp/onlyif.txt文件不存在,並沒有創建;手動創建一個/tmp/onlyif.txt文件再次執行
[root@salt-master ~]# salt 'salt-minion01' cmd.run "touch /tmp/onlyif.txt"
salt-minion01:
[root@salt-master ~]# salt 'salt-minion01' state.sls onlyif 
salt-minion01:
----------
          ID: test-onlyif
    Function: cmd.run
        Name: mkdir /tmp/onlyif
      Result: True
     Comment: Command "mkdir /tmp/onlyif" run
     Started: 15:38:07.712492
    Duration: 14.646 ms
     Changes:   
              ----------
              pid:
                  6871
              retcode:
                  0
              stderr:
              stdout:

Summary for salt-minion01
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  14.646 ms

#可以看到上面我們手動創建了一個/tmp/onlyif.txt文件後再次執行,則發生了改變,在/tmp/創建了onlyif目錄

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章