Saltstack_使用指南18_API
1. 主机规划
salt 版本
[root@salt100 ~]# salt --version
salt 2018.3. (Oxygen)
[root@salt100 ~]# salt-minion --version
salt-minion 2018.3. (Oxygen)
netapi modules
https://docs.saltstack.com/en/latest/ref/netapi/all/index.html
rest_cherrypy
https://docs.saltstack.com/en/latest/ref/netapi/all/salt.netapi.rest_cherrypy.html
文章参考:
参考GitHub
https://github.com/yueyongyue/saltshaker
2. 必要的准备
2.1. 安装部署Python3
[root@salt100 Python-3.7.]# yum install -y libffi-devel # 提前安装
[root@salt100 Python-3.7.]# pwd
/root/software/
[root@salt100 software]# ll
total
-rw-r--r-- root root Apr : Python-3.7..tgz
[root@salt100 software]# tar xf Python-3.7..tgz
[root@salt100 software]# cd Python-3.7./
[root@salt100 Python-3.7.]# ./configure # 配置
[root@salt100 Python-3.7.]# make && make install # 编译 与 安装
# 建立软连接
[root@salt100 ~]# ln -s /usr/local/bin/python3. /usr/bin/python3
[root@salt100 ~]# ll /usr/bin/python3
lrwxrwxrwx root root Apr : /usr/bin/python3 -> /usr/local/bin/python3.
2.2. 安装salt-api
等到配置完毕后才能启动salt-api
[root@salt100 ~]# yum install -y salt-api
[root@salt100 ~]# systemctl enable salt-api.service # 开机自启动
2.3. 新建saltapi用户
[root@salt100 ~]# useradd -M -s /sbin/nologin -u saltapi && echo '' | /usr/bin/passwd --stdin saltapi
2.4. 安装pip和CherryPy
[root@salt100 software]# wget https://bootstrap.pypa.io/get-pip.py
[root@salt100 software]# python3 get-pip.py
[root@salt100 software]# pip -V # 查看pip版本
[root@salt100 software]# pip install CherryPy==3.2. # 注意版本
3. 添加https证书
[root@salt100 certs]# pwd
/etc/pki/tls/certs
[root@salt100 certs]# ll
total
lrwxrwxrwx. root root Nov : ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
lrwxrwxrwx. root root Nov : ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
-rwxr-xr-x. root root Apr make-dummy-cert
-rw-r--r--. root root Apr Makefile
-rwxr-xr-x. root root Apr renew-dummy-cert
[root@salt100 certs]# make testcert
umask ; \
/usr/bin/openssl genrsa -aes128 > /etc/pki/tls/private/localhost.key
Generating RSA private key, bit long modulus
.........................................................................+++
........................+++
e is (0x10001)
Enter pass phrase: # 键入加密短语
Verifying - Enter pass phrase: # 确认加密短语
umask ; \
/usr/bin/openssl req -utf8 -new -key /etc/pki/tls/private/localhost.key -x509 -days -out /etc/pki/tls/certs/localhost.crt
Enter pass phrase for /etc/pki/tls/private/localhost.key: # 再次输入相同的加密短语
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name ( letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
[root@salt100 certs]# ll
total
lrwxrwxrwx. root root Nov : ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
lrwxrwxrwx. root root Nov : ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
-rw------- root root Mar : localhost.crt
-rwxr-xr-x. root root Apr make-dummy-cert
-rw-r--r--. root root Apr Makefile
-rwxr-xr-x. root root Apr renew-dummy-cert
[root@salt100 certs]# cd /etc/pki/tls/private/ # 进入目录
[root@salt100 private]# ll
total
-rw------- root root Mar : localhost.key
[root@salt100 private]# openssl rsa -in localhost.key -out localhost_nopass.key # 生成无密码秘钥
Enter pass phrase for localhost.key: # 输入和之前一样的加密短语
writing RSA key
[root@salt100 private]# ll
total
-rw------- root root Mar : localhost.key
-rw-r--r-- root root Mar : localhost_nopass.key
4. 添加配置文件
配置文件存放位置
[root@salt100 ~]# vim /etc/salt/master
##### Primary configuration settings #####
##########################################
# This configuration file is used to manage the behavior of the Salt Master.
# Values that are commented out but have an empty line after the comment are
# defaults that do not need to be set in the config. If there is no blank line
# after the comment then the value is presented as an example and is not the
# default. # Per default, the master will automatically include all config files
# from master.d/*.conf (master.d is a directory in the same directory
# as the main master config file).
#default_include: master.d/*.conf # 默认配置即可
…………
添加配置文件
[root@salt100 master.d]# pwd
/etc/salt/master.d
[root@salt100 master.d]# ll
total
-rw-r--r-- root root Mar : api.conf
-rw-r--r-- root root Mar : eauth.conf
[root@salt100 master.d]# cat eauth.conf
external_auth:
pam:
saltapi:
- .*
- '@wheel' # to allow access to all wheel modules
- '@runner' # to allow access to all runner modules
- '@jobs' # to allow access to the jobs runner and/or wheel module
[root@salt100 master.d]# cat api.conf
rest_cherrypy:
port:
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/private/localhost_nopass.key
5. 重启salt-master
[root@salt100 ~]# systemctl restart salt-master.service # 使配置生效
6. 启动salt-api
[root@salt100 master.d]# systemctl start salt-api.service
[root@salt100 ~]# netstat -lntup | grep 'salt' # 端口查看
tcp 0.0.0.0: 0.0.0.0:* LISTEN /salt-api
tcp 0.0.0.0: 0.0.0.0:* LISTEN /salt-master Z
tcp 0.0.0.0: 0.0.0.0:* LISTEN /salt-master M
7. 使用PAM进行登录验证
[root@salt100 master.d]# curl -k https://172.16.1.100:8000/login \
-H 'Accept: application/x-yaml' \
-d username='saltapi' \
-d password='' \
-d eauth='pam'
return:
- eauth: pam
expire: 1554173316.621825
perms:
- .*
- '@wheel'
- '@runner'
- '@jobs'
start: 1554130116.621824
token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a
user: saltapi
这个token使我们需要的,方便后文操作
8. 得到指定minion的grains信息
[root@salt100 master.d]# curl -k https://172.16.1.100:8000/minions/salt01 \
-H 'Accept: application/x-yaml' \
-H 'X-Auth-Token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a'
## 返回如下信息
return:
- salt01:
SSDs: []
biosreleasedate: //
biosversion: '6.00'
cpu_flags:
………………
9. 获取minion状态【上下线状态】
## 备注: client='runner' 代表在master执行 client='local' 代表在minion执行
[root@salt100 ~]# curl -k https://172.16.1.100:8000/ \
-H 'Accept: application/x-yaml' \
-H 'X-Auth-Token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a' \
-d client='runner' \
-d fun='manage.status'
## 返回如下信息
return:
- down: []
up:
- salt01
- salt02
- salt03
- salt100
10. test.ping测试
curl -k https://172.16.1.100:8000 \
-H 'Accept: application/x-yaml' \
-H 'X-Auth-Token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a'\
-d client=local \
-d tgt='*' \
-d fun=test.ping
## 返回如下信息
return:
- salt01: true
salt02: true
salt03: true
salt100: true
11. 查看jobs信息
在标签1执行
[root@salt100 ~]# salt 'salt01' cmd.run 'whoami && sleep 300'
在标签2执行
[root@salt100 ~]# curl -k https://172.16.1.100:8000/jobs \
> -H 'Accept: application/x-yaml' \
> -H 'X-Auth-Token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a'
return:
- '':
Arguments: []
Function: test.ping
StartTime: , Apr ::21.862530
Target: '*'
Target-type: glob
User: sudo_yun
'':
Arguments: []
Function: test.ping
StartTime: , Apr ::00.770358
Target: '*'
Target-type: glob
User: saltapi
'':
Arguments:
- whoami && sleep
Function: cmd.run
StartTime: , Apr ::53.892493
Target: salt01
Target-type: glob
User: sudo_yun
'':
Arguments:
- ''
Function: saltutil.find_job
StartTime: , Apr ::58.925816
Target:
- salt01
Target-type: list
User: sudo_yun
'':
Arguments: []
Function: saltutil.running
StartTime: , Apr ::06.139505
Target: '*'
Target-type: glob
User: root
'':
Arguments:
- ''
Function: saltutil.find_job
StartTime: , Apr ::08.955596
Target:
- salt01
Target-type: list
User: sudo_yun
'':
Arguments:
- ''
Function: saltutil.find_job
StartTime: , Apr ::18.970482
Target:
- salt01
Target-type: list
User: sudo_yun
[root@salt100 ~]#
[root@salt100 ~]# curl -k https://172.16.1.100:8000/jobs/20190401232353892493 \
-H 'Accept: application/x-yaml' \
-H 'X-Auth-Token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a'
## 返回如下信息
info:
- Arguments:
- whoami && sleep
Function: cmd.run
Minions:
- salt01
Result: {}
StartTime: , Apr ::53.892493
Target: salt01
Target-type: glob
User: sudo_yun
jid: ''
return:
- {}
12. 其他常用操作
# salt 'salt01' state.sls web.apache ,执行 apache.sls # yum 部署httpd
curl -k https://172.16.1.100:8000/ \
-H 'Accept: application/x-yaml' \
-H 'X-Auth-Token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a' \
-d client=local \
-d tgt='salt01' \
-d fun=state.sls \
-d arg='web.apache' # salt -L 'salt01,salt02,salt03' test.ping
curl -k https://172.16.1.100:8000 \
-H 'Accept: application/x-yaml' \
-H 'X-Auth-Token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a'\
-d client=local \
-d tgt='salt01,salt02,salt03' \
-d expr_form='list' \
-d fun=test.ping # salt -G 'host:salt01' cmd.run ifconfig
curl -k https://172.16.1.100:8000 \
-H 'Accept: application/x-yaml' \
-H 'X-Auth-Token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a'\
-d client=local \
-d tgt='host:salt01' \
-d expr_form='grain' \
-d fun=cmd.run \
-d arg='ifconfig' # 以json格式输出
# salt -G 'host:salt01' cmd.run ifconfig
curl -k https://172.16.1.100:8000 \
-H 'Accept: application/json' \
-H 'X-Auth-Token: 6bb11fd17c3476cb7d07373113c93faaa9c27f9a'\
-d client=local \
-d tgt='host:salt01' \
-d expr_form='grain' \
-d fun=cmd.run \
-d arg='ifconfig'
13. 参数解释
client : 模块,python处理salt-api的主要模块,‘client interfaces <netapi-clients>’
local : 使用‘LocalClient <salt.client.LocalClient>’ 发送命令给受控主机,等价于saltstack命令行中的'salt'命令
local_async : 和local不同之处在于,这个模块是用于异步操作的,即在master端执行命令后返回的是一个jobid,任务放在后台运行,通过产看jobid的结果来获取命令的执行结果。
runner : 使用'RunnerClient<salt.runner.RunnerClient>' 调用salt-master上的runner模块,等价于saltstack命令行中的'salt-run'命令
runner_async : 异步执行runner模块
wheel : 使用'WheelClient<salt.wheel.WheelClient>', 调用salt-master上的wheel模块,wheel模块没有在命令行端等价的模块,但它通常管理主机资源,比如文件状态,pillar文件,salt配置文件,以及关键模块<salt.wheel.key>功能类似于命令行中的salt-key。
wheel_async : 异步执行wheel模块
备注:一般情况下local模块,需要tgt和arg(数组),kwarg(字典),因为这些值将被发送到minions并用于执行所请求的函数。而runner和wheel都是直接应用于master,不需要这些参数。
tgt : minions
fun : 函数
arg : 参数
expr_form : tgt的匹配规则
'glob' - Bash glob completion - Default
'pcre' - Perl style regular expression
'list' - Python list of hosts
'grain' - Match based on a grain comparison
'grain_pcre' - Grain comparison with a regex
'pillar' - Pillar data comparison
'nodegroup' - Match on nodegroup
'range' - Use a Range server for matching
'compound' - Pass a compound match string
Saltstack_使用指南18_API的更多相关文章
- Saltstack_实战指南02_各主机Pillar信息指定
1. 实战项目GitHub地址 该项目已经放在了GitHub上,地址如下: https://github.com/zhanglianghhh/salt-example-lnmp 2. 主机规划 3. ...
- Saltstack_实战指南01_系统规划
1. 实战项目GitHub地址 之前<Saltstack_使用指南>详细讲解了saltstack的使用.那么从这节开始实战讲解,当然不会再像之前那样详细说明了.只是讲一些系统规划之类的信息 ...
- Saltstack_使用指南17_salt-ssh
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...
- Saltstack_使用指南16_syndic
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...
- Saltstack_使用指南12_配置管理-jinja模板
1. 说明 下文的案例是根据上一篇文章进行的修改.因此请优先读取上一章博文内容<Saltstack_使用指南11_配置管理-状态之间依赖关系> 2. 主机规划 salt 版本 [root@ ...
- Saltstack_使用指南07_远程执行-执行模块
1. 主机规划 远程执行教程文档 https://docs.saltstack.com/en/latest/topics/tutorials/modules.html 所有模块文档 https://d ...
- Saltstack_使用指南06_远程执行-指定目标
1. 主机规划 Targeting Minions文档 https://docs.saltstack.com/en/latest/contents.html 另请参见:自动化运维神器之saltstac ...
- Saltstack_使用指南05_数据系统-Pillar
1. 主机规划 Pillar文档 https://docs.saltstack.com/en/latest/topics/pillar/index.html 注意事项 修改了master或者minio ...
- Saltstack_使用指南04_数据系统-Grains
1. 主机规划 Grains文档 https://docs.saltstack.com/en/latest/topics/grains/index.html 注意事项 修改了master或者minio ...
随机推荐
- Linux Zookeeper 安装, 带视频
疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 面试必备+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 疯狂创客圈 高并发 ...
- jQuery实现回车触发登录按钮的功能
jQuery实现回车触发登录按钮的功能,代码如下: $('body').keyup(function(e){ if(e.keyCode===13){ $('.login').click() } }) ...
- ruby读写文件的方法
读文件 #Ruby 读取文件 #方法一 file = File.open("/Users/Desktop/demo.txt","r") while line = ...
- vc6.0 绿色版 下载地址
最新版的vs2019已经完全不支持生成运行在xp下的应用程序 每次在xp下测试,都需要配置好vc6.0,但乱七八糟的太多了,给出地址,绿色版可用 http://www.downcc.com/soft/ ...
- 一起学SpringMVC之国际化
随着网络的发展,在Web开发中,系统的国际化需求已经变得非常的普遍.本文主要讲解SpringMVC框架对多语言的支持,仅供学习分享使用,如有不足之处,还请指正. 什么是国际化? 国际化(interna ...
- Git实战指南----跟着haibiscuit学Git(第十一篇)
笔名: haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...
- Odoo,快速上手Odoo,来了解Odoo几个标准模块
odoo通过Apps和Connector扩展和集成数以万计的应用和服务,odoo目前有超过12500个Apps可选用.它囊括了项目管理,生产.财务.记账和销售管理,仓储管理,人力资源管理,等等项目.本 ...
- Cesium数据可视化-仓储调度系统可视化部分(附github源码)
Cesium数据可视化-仓储调度系统可视化部分 目的 仓储调度系统需要一个可视化展示物资运输实况的界面,需要配合GPS设备发送的位置信息,实时绘制物资运输情况和仓储仓库.因此,使用Cesium可视化该 ...
- 学习Linux必看的命令(一)
学习Linux必看的命令(一) 一:什么是Linux Linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,L ...
- Go语言系列:(2)go get 命令介绍
Go语言的代码被托管于 Github.com 网站,该网站是基于 Git 代码管理工具的,很多有名的项目都在该网站托管代码.其他类似的托管网站还有 code.google.com.bitbucket. ...