python saltstack-API

一.简介
Salt-api有两种方式,一种是函数的形式,有人家定义好的函数,我们可以直接调用,直接写python代码调用函数或者类就可以了。
第二种形式是salt-api有封装好的http协议的,我们需要启动一个服务端。
1.调用函数

(1)安装:
yum install –y salt-api

(2)进入python交互界面,加载master的配置文件
import  salt.config
master_opts = salt.config.client_config(‘/etc/salt/master’)
print(‘master_opts’) 


(3). 加载minion的配置文件
import salt.config
minion_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 openssl

pip install cherrypy==3.2.3

配置自签名证书

解密key文件,生成无密码的key文件, 过程中需要输入key密码,该密码为之前生成证书时设置的密码


修改文件权限


添加用户
useradd -M -s /sbin/nologin/ saltapi

echo "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上添加:



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值