saltstack的state.sls和state.highstate之区别

saltstack的state.sls和state.highstate之区别

state.sls默认的运行环境是base环境,但是它并不读取top.sls(top.sls定义了运行环境以及需要运行的sls)。关于state.sls的官方文档说明如下:

salt.modules.state.sls(mods, saltenv='base', test=None, exclude=None, queue=False, env=None,**kwargs)

这里saltenv指的是运行环境,默认是base环境。

state.highstate: 这个是全局的所有环境,以及所有状态都生效。它会读取每一个环境的top.sls,并且对所有sls都生效。

我只有一个base环境,这个base环境下的top.sls文件内容如下:

base:
  '*':
    - backup
    - monitor
    - sysctr
    - slowlog
    - offline
    - conf
    - statistics
    - test
    - shell
    - dbmsdba
    - dba-tools

top.sls文件并没有定义 – sync_dbconf这个sls。但是在base环境定义的目录下:

file_roots:
   base:
     - /data/dbms/salt

也就是/data/dbms/salt目录下,定义了sync_dbconf.sls文件,该sls定义是为了向minion下发特定的文件。

1)、使用state.highstate的时候

/data1/Python-2.7.4/bin/salt 'minion_xxxx' state.highstate

可以发现并没有将sync_dbconf.sls定义的文件下发到minion端

2)、使用state.sls的时候

/data1/Python-2.7.4/bin/salt 'minion_xxxx' state.sls sync_dbconf

发现可以将sync_dbconf.sls定义的文件下发到minion端

以上说明:

1、state.highstate会读取所有环境(包括base环境)的top.sls文件,并且执行top.sls文件内容里面定义的sls文件,不在top.sls文件里面记录的sls则不会被执行;

2、state.sls默认读取base环境,但是它并不会读取top.sls文件。你可以指定state.sls执行哪个sls文件,只要这个sls文件在base环境下存在;

3、state.sls也可以指定读取哪个环境:state.sls salt_env=’prod’ xxxx.sls,这个xxxx.sls可以不在top.sls中记录。