目录
一、Salt命令的构成
Salt命令由三个主要部分构成:salt '<target>' <function> [arguments]
1、target
- target: 指定哪些minion, 默认的规则是使用glob匹配
minion id
。
salt '*' test.ping
- Targets也可以使用正则表达式:
salt -E 'server[1-3]' test.ping
- Targets也可以指定列表:
salt -L 'server2,server3' test.ping
2、funcation
- funcation是module提供的功能,Salt内置了大量有效的functions。
salt '*' cmd.run 'uname -a'
3、arguments
- arguments通过空格来界定参数:
salt 'server2' sys.doc pkg #查看模块文档
salt 'server2' pkg.install httpd
salt 'server2' pkg.remove httpd
- salt内置的执行模块列表:
http://docs.saltstack.cn/ref/modules/all/index.html
二、编写远程执行模块
1、编写模块
- 编辑master配置文件:
vim /etc/salt/master
##修改
file_roots:
base:
- /srv/salt
- 重启master服务:
systemctl restart salt-master
- 创建模块目录:
mkdir /srv/salt/_modules
- 编写模块文件:
vim /srv/salt/_modules/mydisk.py
def df():
return __salt__['cmd.run']('df -h')
- 同步模块:
salt server2 saltutil.sync_modules
- 运行模块:
salt server2 mydisk.df
2、了解YAML语法
- 规则一: 缩进
Salt需要每个缩进级别由两个空格组成,不要使用tabs。 - 规则二: 冒号
字典的keys在YAML中的表现形式是一个以冒号结尾的字符串:my_key: my_value
- 规则三: 短横杠
想要表示列表项,使用一个短横杠加一个空格。list_value_one
list_value_two
3、SLS
- Salt 状态系统的核心是SLS,或者叫S a L t S tate 文件。
- SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。
- sls文件命名:
- sls文件以
.sls
后缀结尾,但在调用时不用写此后缀。 - 使用子目录来做组织是个很好的选择。
init.sls
在一个子目录里面表示引导文件,也就表示子目录本身, 所以apache/init.sls
就是表示apache
。 - 如果同时存在
apache.sls
和apache/init.sls
,则apache/init.sls
被忽略,apache.sls
将被用来表示apache
。
4、配置管理
(1)方法一
- 创建一个sls文件:
vim /srv/salt/apache.sls
##写入
httpd: # ID声明
pkg: # 状态声明
- installed # 函数声明
- 指定主机执行:
salt server2 state.sls apache
在运行过程中,在server2上ps ax
,可以看到server2调用本机的yum在安装。
(2)方法二
建立apache
目录,用apache.install
运行
(3)方法三
- 准备Top文件:
vim /srv/salt/top.sls
##写入
base:
'*':
- apache
- 批量执行:
salt '*' state.highstate
(4)一些例子
- a.
修改端口为8080
运行成功发现端口从80
变为8080
,且server2上开启8080
端口:
- b.
- c.
像配置server2一样配置server3,并在server3上安装salt-minion
:
在server1上添加nginx安装包:
编写文件,在server3上安装nginx: