zoukankan      html  css  js  c++  java
  • 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目录
  • 相关阅读:
    For each db / table
    转---网络上来的,做一个数组样的结构
    JAVA 相关资料
    转--也不知是哪位大侠写的了
    T-SQL切割字符串方法小结 2
    OPENQUERY
    行集函数专题
    行列转换
    第一章 SQL基础
    解释型语言与编译型语言的区别
  • 原文地址:https://www.cnblogs.com/Tang-Yuan/p/14307464.html
Copyright © 2011-2022 走看看