saltstack-api
salt-api
使用有2种方式,一种是函数形式,也就是通过python代码直接调用已经定义好的函数,第二种是封装好的http协议,启动一个服务端直接通过http访问。
安装
yum install -y salt-api
函数形式调用
使用salt '*' sys.list_modules
可以查看所有可用的模块。
加载master配置文件
1 | import salt.config |
加载minion配置文件
1 | import salt.config |
master执行模块
1 | import salt.client |
cmd中命令格式'<操作目标>','<模块>','[参数]'。
例:'*','cmd.run',['df -h']
对于其他模块的API调用,只需要改变cmd命令即可。
- cmd模块
client.cmd('*', 'cmd.run', ['free -m'])
也可以一次执行多个模块或者传递多个参数client.cmd('*', ['cmd.run'],[['df -h'], ['whoami']])
client.cmd('*', ['test.ping', 'cmd.run'],[[], ['whoami']])
- cp模块
client.cmd('*','cp.get_file',['salt://script/test.py','/minion/test.py'])
- cron模块
client.cmd('slave','cron.set_job',['root','*','*','*','*',1,'/usr/local/weekly'])
- dnsutil模块
clietn.cmd('slave','dnsutil.hosts_append',['/etc/hosts','127.0.0.1','slave','slave2'])
- file模块
client.cmd('*','file.remove',['/tmp/foo'])
- iptables模块
client.cmd('*','iptables.append',['filter','INPUT','rule=\'-p tcp --sport 80 -j ACCEPT\''])
- network模块
client.cmd('slave','network.ip_addrs')
- pkg模块
client.cmd('*','pkg.remove',['php'])
- service模块
client.cmd('*','service.stop',['nginx'])
异步执行
对于执行时间过长,没法直接返回的,可以通过异步执行的形式进行返回。
使用cmd_async
和get_cache_returns(jid)
实现。1
2
3
4import salt.client
local = salt.client.LocalClient('/etc/salt/master')
jid = local.cmd_async('*', 'network.ip_addrs')
local.get_cache_returns(jid) #输出结果:{'slave': {'ret': ['192.168.145.130']}}
minion端执行salt命令
1 | import salt.client |
其执行类似于sal-call,可以在minion端执行命令。
salt.runner使用
在master端
1 | import salt.runner |
grains
在master端
1 | import salt.config |
1 | import salt.config |
内置变量
在python交互环境中,下面这些内置变量是不生效,只要在自定义的模块中使用才生效。__opts__
配置文件__salt__
执行modules
1 | __salt__['cmd.run']('fdisk -l') ##__salt__[模块](参数) |
说明:salt是个字典,它里面装了minion上所有的modules,salt的key是一个个的模块名称,value则是模块里面的一个个函数__pillar__
pillar__grains__
grains__context__
1 | if not 'cp.fileclient' in __context__: |
http api
salt-api使用cherrypy框架和salt接口实现的。
安装
yum -y install salt-api
配置
创建用于salt-api的用户
1 | useradd -M -s /sbin/nologin/ saltapi |
master配置文件
1 | vi /etc/salt/master +12 |
创建配置文件
1 | mkdir -p /etc/salt/master.d/ |
更新配置文件内容
cat /etc/salt/master.d/api.conf
1 | rest_cherrypy: |
cat /etc/salt/master.d/eauth.conf
1 | external_auth: |
启动salt-apisystemctl start salt-api
启动之后可以看到8000端口已经在监听状态,且salt-api服务已启动
1 | [root@master master.d]# netstat -lntp|grep 8000 |
上面配置文件使用的是http协议,若要使用https协议,则需要生成证书
1 | cd /etc/salt |
同时更新/etc/salt/master.d/api.conf
内容即可。
cat /etc/salt/master.d/api.conf
1 | rest_cherrypy: |
调用
登录,获取token
说明:saltapi重启token会发生变化,不重启则不会变化。
1 | curl -k http://192.168.145.129:8000/login -H "Accept: application/x-yaml" -d username='saltapi' -d password='saltapi' -d eauth='pam' |
执行结果如下
1 | return: |
使用获取的token查询硬盘使用情况
1 | curl -k http://192.168.145.129:8000 \ |
模块调用
1 | curl -k http://192.168.145.129:8000 \ |