当前主流配置管理系统 ansible,saltsatck,puppet等。各有优缺点,但是只有saltstack只有restfull api可以调用,其他的想要构建一个批量管理平台必须跟ansible服务器在一起。
staltstack不必多说,是一个相当方便和牛逼的配置管理工具,多元的架构可以让他很轻松管理上万台主机,可以作为包括生产环境的跳板机使用,使用salt可以很轻松开发出基于web的批量管理平台,其中主要依赖于salt-api --> 一个可以提供restfull api的服务接口。
这里主要介绍salt-api的使用。
环境 centos7.3
安装:
服务器端
salt-master
salt-api
restfull,必须安装在salt-master主机上
被管理主机
salt-minion
具体安装方法 官方最全安装手册。
基本配置:
salt-master 配置文件位置 /etc/salt/master
使用restfull api不用配置(很轻松,YMY) ,
如果使用salt命令管理机器,指定下sls的文件地址这个介绍不在本文范围内,跳过。
file_roots:
base:
- /srv/salt/
salt-api 配置文件目录 /etc/salt/master.d/
创建一个基本配置 saltapi.conf (名字随便取)
写入基本配置
-
rest_cherrypy:
-
host: 172.17.3.55 #salt-api地址,本机地址,http访问地址
-
port: 8001 #salt-api端口
-
disable_ssl: true #如果不使用ssl
-
#ssl_crt: crt_file
-
#ssl_key: key_file #如果使用ssl指向证书
还有个用户配置,用来指定salt-api登录的用户 auth.conf(名字也是随便起)
-
external_auth:
-
pam: #使用linux的认证模块
-
saltapi: #用户名,系统用户
-
- .* #权限
-
- '@wheel'
- '@runner'
创建saltapi用户 useradd saltapi -s /sbin/nologin
授权密码 echo saltapi | password saltapi --stdin
salt-minion 配置文件 /etc/salt/minion
修改一项 指向master主机,其他的都默认,如果改了其他地方那就全部对应修改
master: 172.17.3.55
启动各应用
systemctl start salt-master
systemctl start salt-minion
systemctl start salt-api
使用:
第一步 获取token,token是执行所有命令的认证
-
data = {
-
"username": "saltapi",
-
"password": "saltapi",
-
"eauth": "pam"
-
}
-
res=requests.post('',data)
-
-
-
res.json()
-
{
-
"return": [
-
{
-
"perms": [
-
".*"
-
],
-
"start": 1564555975.711495,
-
"token": "ca662c906a189c394e39f9699629b55a40ca9459", #获得token
-
"expire": 1564599175.711497,
-
"user": "saltapi",
-
"eauth": "pam"
-
}
-
]
-
}
第二步 开始执行各种需要的命令,这方面要对salt各种模块使用方法比较熟悉。
-
headers = {
-
'Accept': ' application/json',
-
'X-Auth-Token': 'ca662c906a189c394e39f9699629b55a40ca9459', #token放入头部
-
}
-
-
data = {
-
'client': 'local' #调用底层salt模块
-
'tgt': '*' # target 目标主机,需要执行的主机,也可以是list,pcre等,对应expr_form
-
'fun': 'cmd.run' # 执行函数,可以是单个也可以是list,对于arg也为list,跟arg一一对应参数
-
'expr_form': 'glob' # tgt表达式 glob,pcre,list,grain等,属于执行主机的选择
-
'arg': 'ifconfig' # fun的参数,对应fun
-
}
-
res=requests.post('',data,headers)
返回格式 {
"return":[
{
"host1": "result1"
},
{
"host2": "result2"
}
]
}
主要就是这些,对主要模块灵活运用后,想当简单(比ansible的api简单多了)
阅读(3486) | 评论(0) | 转发(0) |