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
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