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目录
原文地址:https://www.cnblogs.com/Tang-Yuan/p/14307464.html