一.简介
Salt-api有两种方式,一种是函数的形式,有人家定义好的函数,我们可以直接调用,直接写python代码调用函数或者类就可以了。
第二种形式是salt-api有封装好的http协议的,我们需要启动一个服务端。
1.调用函数
(1)安装:
yum install –y salt-api(2)进入python交互界面,加载master的配置文件
import salt.configmaster_opts = salt.config.client_config(‘/etc/salt/master’)
print(‘master_opts’)
(3). 加载minion的配置文件
import salt.configminion_opts = salt.config.minion_config(‘/etc/salt/minion’)
(4). 在master上执行各种模块:
>>> import salt.client>>> local = salt.client.LocalClient(‘/etc/salt/minion’)#不加也可以,加上最好
>>> local.cmd('*', "test.ping")
>> local.cmd('*', "cmd.run", "w")
如果一次要执行多个模块,
自定义的模块:
(1. 在 Master上创建存放模块的目录:mkdir -pv /srv/salt/_modules
cd /srv/salt/_modules
(2. 在 Master上编写 扩展模块文件 : hello.py
#!/usr/bin/env python
def say_hello():
return "hello salt !"
(3.执行同步modules命令, 将扩展模块文件 同步(拷贝)到minion端。
salt '*' saltutil.sync_modules
(4.执行自定义模块
(5). 如果对于执行时间过长,没法直接返回的,我们就可以通过异步执行的形式进行返回
cmd_async和get_cache_returns(jid)一下代码只能只能在master上执行,而且是只能在master上才可以使用
__opts__ = salt.config.minion_config('/etc/salt/minion')
conf_file = __opts__['conf_file']
client = salt.client.LocalClient(conf_file)jid = client.cmd_async(minion, function, params)wait_time = 0
sleep_interval = 1while wait_time < timeout: print('wait {0} seconds'.format(sleep_interval)) time.sleep(sleep_interval) returns = client.get_cache_returns(jid) if returns: return returns wait_time += sleep_interval
6. 客户端执行salt命令:
>>> import salt.config>>> import salt.client
>>> caller = salt.client.Caller(‘/etc/salt/minion’)
>>> caller.cmd("test.ping")
True
类似shell命令的salt-call,可以在minion端执行salt的命令,测试连通性什么的
7. Master端执行salt-run
>>> import salt.config>>> import salt.runner
>>> __opts__ = salt.config.client_config('/etc/salt/master')
>>> runnermaster = salt.runner.RunnerClient(__opts__)
>>> runnermaster.cmd('jobs.list_jobs', [])
查看所有的
>>>runnermaster.cmd('manage.status')
8. Salt的内置环境变量:
在python的交互环境中,这些变量是不生效的,只有在自定义的模块,活着salt执行时才生效__opts__ 配置文件,类型
__salt__ 执行modules
__salt__['cmd.run']('fdisk -l')
__salt__['network.ip_addrs']()
__pillar__ pillar
__grains__ grains
__context__
if not 'cp.fileclient' in __context__:
__context__['cp.fileclient'] = salt.fileclient.get_file_client(__opts__)
2.Saltstack的httpapi
(1.安装
yum install -y gcc make python-devel libffi-devel salt-api opensslpip install cherrypy==3.2.3
配置自签名证书
解密key文件,生成无密码的key文件, 过程中需要输入key密码,该密码为之前生成证书时设置的密码
修改文件权限
添加用户
useradd -M -s /sbin/nologin/ saltapiecho "123456" |passwd saltapi --stdin
配置salt-api
修改/etc/salt/master文件
sed -i '/#default_include/s/#default/default/g' /etc/salt/master
创建/etc/salt/master.d/目录
mkdir -p /etc/salt/master.d/
cd /etc/salt/master.d/
touch eauth.conf
touch api.conf
编辑eauth.conf,添加下面内容
external_auth:
pam:
saltapi: # 用户
- .* # 该配置文件给予saltapi用户所有模块使用权限,出于安全考虑一般只给予特定模块使用权限
编辑api.conf,添加下面内容
rest_cherrypy:
port: 8001
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/private/localhost_nopass.key
如不想使用证书:
vim master.d/api.conf
rest_cherrypy:
port: 8001
disable_ssl: True
#ssl_crt: /etc/pki/tls/certs/localhost.crt
#ssl_key: /etc/pki/tls/private/localhost_nopass.key
eauth.conf文件不用动
启动salt-api
service salt-master restart
service salt-api restart
ps -ef|grep salt-api
netstat -lnput|grep 8001
(2.通过curl获取tocken及执行module
获取tocken:curl -k http://192.168.1.131:8001/login -H "Accept: application/x-yaml" -d username='saltapi' -d password='123456' -d eauth='pam'执行模块:
curl -k http://192.168.1.131:8001 -H "Accept: application/json" -H "X-Auth-Token: 85af184f22a6de5daddbf64e5a62a5c08b7b18ff" -d client='local' -d tgt='*' -d fun='test.ping' &&echo
(3.通过postman获取tocken及运行模块
postman自行下载安装
如果使用了证书那么先进行证书配置:
点击扳手图标,再点击Settings:
关闭SSL校验:
切到Certificates页签:
添加客户端校验:
添加Host信息、导入.crt文件和.key文件(文件从服务器中导出),还需要输入口令,该口令为生成证书时填写的口令。
使用postman获取tocken:
Headers里面是用来存放headers的信息的
Body里面来存放数据的,常用的就是x-www-form-urlencoded
form-data 是用来存放页面form表单数据的
只要salt-api不重启,tocken就不会过期,salt-api重启以后,tocken就会过期
通过postman来获取执行module test.ping:
运行就可以得到模块执行的结果。
通过postman查看minion端的IP:
通过postman运行自定模块:
自定义模块:
将模块同步到minion端:salt "*" saltutil.sync_modules
因为该模块需要两个参数,所以要在postman上添加: