简单介绍
什么是state模块?
- 远程执行是salt的核心所在。
- 管理员可以通过执行远程执行模块,达到对minion的控制(如cmd.run "yum install -y httpd")。但对于minion的环境或者状态控制,即你想让minion达到一个什么样的状态,用state模块更便利。 只需要描述想让salt minion达到什么状态即可,执行部分由state模块完成。
远程执行&&State模块:
- 区别:执行模块是过程式,连续调用时将执行相同的逻辑和指令;状态模块为描述性的,它们只是执行必要的工作,在minion上根据描述文件达到指定的状态。
- 所有的state模块都会遵循这个原则,只在检测到真实状态和所需状态不同的情况下才执行功能。这可以通过判断来让minion以最小的代价进入指定的状态。
State 配置文件(sls)
SLS配置文件使用 YAML 语言描述。Salt默认的sls文件的renderer是 YAML renderer,它的工作是将YAML数据格式的结构编译成为Python数据结构给Salt使用。
重要的三个规则:
- 缩进:用两个空格,不要使用 tab 键。
- 冒号:与Python的映射如下:
## YAML
my_key: my_value
## python
{'my_key': 'my_value'}
## YAML
my_key1: my_key2:my_value
## python
{'my_key': {
'my_key2': 'my_value'
}
}
- 短横杠:用一个短横杠加一个空格来表示列表项(Python中的列表[])
keys:
- value1
- value2
- value3
## 映射为Python:
{'key':['value1','value2','value3']
State文件的格式:
<ID Declaration>:
<State Module>.<Function>:
- name: <name>
- <Function Arg>
- <Function Arg>
- <Function Arg>
- <Requisite Declaration>:
- <Requisite Reference>
## 下面列举写法:
<ID Declaration>:
<State Module>.<Function>:
- <Function Arg>
- <Function Arg>
- <Function Arg>
- <Names>:
- <name>
- <name>
- <name>
- <Requisite Declaration>:
- <Requisite Reference>
- <Requisite Reference>
State sls配置文件中:
- <ID Declaration>必须是独一无二的有效的Python字符串,自定义的。
- <State Module>.<Function>与远程执行命令采用相同格式,但是具体支持的模块和函数与远程执行的模块和函数有差异,可分别通过sys.list_state_modules、sys.list_state_functions 查看,远程对应的则是sys.list_modules、sys.list_functions。
- 最后是函数参数,首个函数参数通常是name,然后是状态所需的其他参数。具体用法可参考sys.state_doc.
实践案例
- 配置windows防火墙
conf-firewall.sls
configure-firewall:
win_firewall.disabled:
- name: allprofiles
实践效果:
执行前,私有网络和共有网络防火墙为开启状态;state执行后,变成关闭状态。
- 管理windows服务
conf-services.sls
#启用开机自启
enable-boot-services:
service.enabled:
- name: w32Time
#禁用开机自启
#disable-boot-services:
# service.disabled:
# - name: w32Time
#启服
#start-services:
# service.running:
# - names:
# - w32Time
# - wuauserv
#停服
stop-services:
service.dead:
- names:
- w32Time
- wuauserv
实践效果:
执行前:
执行后: 两个服务均被停止运行,且w32Time被设置为开机自启动。
- 执行ps脚本【以服务器封网为例】
conf-gateway.sls
clear-gateway:
cmd.script:
- name: set_netroute.ps1
- source: salt://scripts/Deny_Server_Access_InterNet/set_netroute.ps1
- shell: powershell
执行前:
执行后: 缺省网关被删除。
- 启用RDP远程桌面
conf-rdp.sls
configure-rdp:
rdp.enabled
实践效果: