top.sls在salt中有两种,即state的top.sls和pillar的top.sls。他们的格式是一样的。

环境: #在master配置文件中设置环境  ‘*’    #target      - state  #state 文件列表            master配置文件/etc/salt/masterfile_roots:  base:    - /srv/saltpillar_roots:  base:    - /srv/pillar

top.sls将不同的状态文件定位到不同的minions中,highstate函数正是通过top.sls文件作为入口对主机和模块进行管理。

high data 和 low data,high数据一般指可见数据,low数据被salt提取并使用的数据。

第一:highstate有3个组件:

high data sls文件high state

查看highstate使用show_highstate

[root@Management-Machine-140 salt]# salt '136' state.show_highstate --out yaml'136':  install man:    __env__: base    __sls__: install-man    pkg:    - pkgs:      - man      - lrzsz    - installed    - order: 10000[root@Management-Machine-140 salt]#

第二:生成high state后,会被送入salt编译器,salt会重新格式化成为salt内部数据结构,用于评估每个声明,推送到state模块,low数据也被拆分为以下部分:

low statelow区块state模块执行模块

查看lowdata

image.png

state执行模块:

1.state.apply会将highdata缓存到minion端(high data是组成sls文件的块,而多个sls文件通过top.sls文件内的一个环境使用就组成了 highstate了)

state.apply会调用state.highstate 或者 state.sls,这个基于后面的参数。分为以下两种

   a. salt '*' state.apply 会执行top.sls state文件。  

   b. salt '*' state.apply install-man 执行salt://install-man 或者salt://install-man/init.sls

2.当执行state.highstate方法时,salt会自动编译在top.sls中的所有sls文件,编译到单独的definition中,称为highstate。

3.state.sls 执行一个或多个sls文件

示例:

[root@Management-Machine-140 salt]# cat top.sls install-man.slsbase:  '*':    - install-maninstall man:  pkg.installed:{% if grains['id'] == '136' %}    - pkgs:      - man      - lrzsz{% endif %}[root@Management-Machine-140 salt]# salt '136' state.apply136:    ----------    pkg_|-install man_|-install man_|-installed:        ----------        __run_num__:            0        changes:            ----------            lrzsz:                ----------                new:                    0.12.20-27.1.el6                old:            man:                ----------                new:                    1.6f-39.el6                old:        comment:            The following packages were installed/updated: lrzsz, man        duration:            5956.067        name:            install man        result:            True        start_time:            16:10:06.152850[root@Management-Machine-140 salt]# salt '136' state.highstate        #也可以进行安装136:    ----------    pkg_|-install man_|-install man_|-installed:        ----------        __run_num__:            0        changes:            ----------            lrzsz:                ----------                new:                    0.12.20-27.1.el6                old:            man:                ----------                new:                    1.6f-39.el6                old:        comment:            The following packages were installed/updated: lrzsz, man        duration:            20222.15        name:            install man        result:            True        start_time:            16:11:08.375206