Salt-API入门

在Google搜索栏输入salt-api,会有一些讲述如何使用Salt-API的文章,确实有效,不过都是建立
在将Salt安装在默认目录下的情况下,即通过apt-get install salt(Ubuntu)或yum install
salt(CentOS)的方式。不过我希望的是项目能创建在自己指定的目录中,关于这一点,貌似没有找到有
相关介绍的文章,所以自己在这里记录一下。

测试环境:

  • CentOS 7
  • Python 2.7.5
  • virtualenv 15.1.0
  • pip 9.0.1
  • salt 2016.11.2 (Carbon)

(假定相关的环境依赖都已安装成功,有一台minion能与master连接)

安装Salt

首先创建项目目录/root/SaltAPI:

$ cd /root
$ mkdir SaltAPI

接下来则是在项目目录下创建python虚拟环境,只是用于开发salt-api。

$ cd SaltAPI
$ virtualenv venv -p python2.7

这里指定了虚拟环境使用的python版本是2.7

通过pip安装salt:

$ pip install salt

到这里salt就算是安装完成了,可以查看一下salt的版本。

$ salt --version
salt 2016.11.2 (Carbon)

之后就可以输入salt-master运行salt了。不过这种方式运行的salt读取的配置都是默认值,并不是
期望中的读取当前目录下相关配置。

在SaltAPI目录下手动创建配置文件目录以及密钥文件、缓存文件、日志文件等。

$ mkdir conf           # 存放配置文件的目录
$ mkdir -p var/run     # 存放salt运行时文件的目录
$ mkdir -p var/pki     # 存放密钥文件的目录
$ mkdir -p var/cache   # 存放缓存文件的目录

salt-master运行时读取master这个配置文件,这里给出一份简单版本的,只指定了必要的配置项

# master会自动读取default_include目录先的所有配置文件
# 之后的salt-api文件也会存在这个目录下面
default_include: /root/SaltWeb/conf/*.conf# 绑定的接口地址
interface: 192.168.1.101# pidfile文件目录
pidfile: var/run/salt-master.pid# 项目根目录
root_dir: /root/SaltAPI# 存放密钥目录
pki_dir: var/pki# 缓存文件目录
cachedir: var/cache# sock文件存放目录
sock_dir: var/run# master日志
log_file: var/log/salt_master.log# 是否自动接受minion的连接
auto_accept: True

现在运行salt-master。

# 若只执行salt-master -c conf,进程会占用当前的shell,所以将它放到后台执行
# 日志定向到var/log/salt_master.log文件中
# 不需要指定具体的master,salt会自己在conf文件下查找master文件
$ salt-master -c conf >var/log/salt_master.log 2>&1 &

有必要提醒一下,因为指定了配置文件,那么所有的salt相关操作也必须指定配置文件才能正常执行。

$ salt '*' test.ping
[ERROR   ] Unable to connect to the salt master publisher at /var/run/salt/master
The salt master could not be contacted. Is master running?
$ salt '*' test.ping -c conf
192.168.1.102:True

salt的准备工作基本完成,接下来则是salt-api。

运行Salt-API

因为salt-api使用eauth验证系统,即通过salt-api所在主机上的账户进行验证,所以最好单独创建
一个用于登陆salt-api的用户

$ useradd salttest
$ passwd salttest

出于安全方面的考虑,官方建议使用https协议,如不想使用https协议,可以跳过这一步。
生成自签名的证书:

# 将证书生成在conf目录下
$ openssl genrsa -out conf/key.pem 4096
$ openssl req -new -x509 -key conf/key.pem -out conf/cert.pem -days 1826

接下来创建salt-api的配置文件conf/salt-api.conf:

external_auth:pam:salttest:  # 刚才创建的用户名- .*rest_tornado:port: 8080host: 0.0.0.0# disable_ssl: True # 若使用http协议,去掉注释,并注释下列两行ssl_crt: conf/cert.pemssl_key: conf/key.pem

然后运行salt-api

$ salt-api -c conf > var/log/salt-api.log 2>&1 &

至此,salt-api已经可以使用了。

验证Salt-API

在调用salt-api前,需要获取token,即登陆获取凭证。

$ curl -ki https://192.168.1.101:8080/login -H "Accept: application/json" \
-d username="salttest" -d password="password" -d eauth="pam"HTTP/1.1 200 OK
Date: Wed, 01 Mar 2017 10:24:48 GMT
Content-Length: 260
Content-Type: application/json
Server: TornadoServer/4.4.2{"return": [{"perms": [".*"], "start": 1488363888.19893, "token": "9ed34f06****f72976ef59bb5f4fa9",  # 参数长,删减一部分"expire": 1488407088.198931, "user": "uyun", "eauth": "pam"}]}

拿到token之后,有两种使用方式:

  1. 基于cookie的session
  2. 在http\https请求的headers这加上X-Auth-Token: 9ed34f06****f72976ef59bb5f4fa9

使用Salt-API

当直接使用以下方式执行命令,会得到空的结果:

$ curl -ik https://10.1.240.212:8090/ -H "Accept: application/json" \
-H "X-Auth-Token:9ed34f06****f72976ef59bb5f4fa9" \
-d client='local' -d tgt='*' -d fun="test.ping"HTTP/1.1 200 OK
Date: Wed, 01 Mar 2017 12:00:14 GMT
Content-Length: 16
Content-Type: application/json
Server: TornadoServer/4.4.2{"return": [{}]} 

原因前文中有提到过,在运行命令时必须要制定配置文件目录,不然得不到正确的结果。
那么问题就在于,如何通过http/https请求指定配置文件目录呢?

因为这个问题纠结了好一会儿,最后才算是在源码中找到了传递配置文件参数的方法。这里就不详细
说明了。

请求中可以通过c_path参数指定配置文件目录。

$ curl -ik https://10.1.240.212:8090/ -H "Accept: application/json" \
-H "X-Auth-Token:9ed34f06****f72976ef59bb5f4fa9" \
-d client='local' -d tgt='*' -d fun="test.ping" -d c_path="/root/SaltAPI/conf"HTTP/1.1 200 OK
Date: Wed, 01 Mar 2017 12:00:14 GMT
Content-Length: 16
Content-Type: application/json
Server: TornadoServer/4.4.2{"return": [{"192.168.1.102": "true"}]} 

而且,只需要再第一次执行命令时指定c_path参数(配置文件目录绝对路径),指定一次后salt-api服务器
会缓存配置,之后运行命令则不需要再次制定c_path参数。如果salt-api服务重启的话,再次执行命令还
是需要指定一次c_path参数。

$ curl -ik https://10.1.240.212:8090/ -H "Accept: application/json" \
-H "X-Auth-Token:9ed34f06****f72976ef59bb5f4fa9" \
-d client='local' -d tgt='*' -d fun="test.ping"HTTP/1.1 200 OK
Date: Wed, 01 Mar 2017 12:00:14 GMT
Content-Length: 16
Content-Type: application/json
Server: TornadoServer/4.4.2{"return": [{"192.168.1.102": "true"}]} 

参考文章

salt源码

salt api 配置和使用

Salt-API安装配置及使用

转载于:https://www.cnblogs.com/agnewee/p/6487262.html

从零开始搭建Salt Web之初探salt-api相关推荐

  1. 从零开始搭建一个web图书管理项目(增删改查功能)

    参考资料:https://blog.csdn.net/qq_23994787/article/details/73612870 http://how2j.cn/ 实习第一周,写下一些在建立web项目中 ...

  2. 带api的php探针,从零开始搭建前端监控系统(一)——web探针sdk

    前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: 您的支持是我们不断前进的动力. 喜欢请start!!! 喜欢请start!!! 喜欢请start!!! 本文是该系列第 ...

  3. 从零开始搭建web开发环境

    从零开始搭建web开发环境 一.安装浏览器 二.安装编辑器 三.安装nvm管理工具 1.安装及配置 2.常用命令 四.安装npm包管理器 五.nodemon工具 六.安装Git工具 七.安装yarn包 ...

  4. 从零开始搭建你的Web服务器

    http://www.hello-code.com/blog/architecture/201506/5147.html 有天一个女士出门散步,路过一个建筑工地,看到三个男人在干活.她问第一个男人,& ...

  5. 从零开始搭建 web 聊天室(一)

    本篇将介绍如何快速.简便地使用 socket.io 库搭建一个 web 在线聊天室.前端并没有使用任何框架.后端使用 express 框架搭建简易的后端. socket.io 库本质上是基于 webs ...

  6. 从零开始搭建创业公司后台技术栈!

    原文 : http://ju.outofmemory.cn/entry/351897 前言 说到后台技术栈,脑海中是不是浮现的是这样一幅图? 图 1 有点眼晕,以下只是我们会用到的一些语言的合集,而且 ...

  7. 从零开始搭建公司后台技术栈

    有点眼晕,以下只是我们会用到的一些语言的合集,而且只是语言层面的一部分,就整个后台技术栈来说,这只是一个开始,从语言开始,还有很多很多的内容.今天要说的后台是大后台的概念,放在服务器上的东西都属于后台 ...

  8. 从零开始搭建创业公司全新技术栈

    目录 **1.项目管理/Bug管理/问题管理** **2.DNS** **3.LB(负载均衡)** **4.CDN** **5.RPC 框架** **6.名字发现/服务发现** **7.关系数据库** ...

  9. 从零开始搭建创业公司后台技术栈

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 -     前言 ...

  10. 容器编排技术 -- Kubernetes从零开始搭建自定义集群

    容器编排技术 -- Kubernetes从零开始搭建自定义集群 1 设计和准备 1.1 学习 1.2 Cloud Provider 1.3 节点 1.4 网络 1.4.1 网络连接 1.4.2 网络策 ...

最新文章

  1. Android ProgressBar 不能在Button上面显示
  2. unity3d 任务头上的血条
  3. php无法创建cookie,php-curl cookie无法成功创建
  4. mds算法python函数_分享python mds,sha256加密算法,c#对应sha256加密算法
  5. linux之vi,vim命令
  6. windows 子系统认识(1)
  7. 教你几个白嫖百度文库的方法,亲测可用!建议收藏!
  8. 基于Qt的NAT检测和NAT穿透
  9. markdown pad2注册码(2017年9月27日)
  10. python剪贴板操作_python操作剪贴板
  11. 浅析SkipList跳跃表原理及代码实现
  12. python使用redis_python如何连接redis
  13. 为什么总显示连接服务器失败怎么回事,为什么总是出现"与总服务器连接失败"的字样 – 手机爱问...
  14. 人工智能书单|Deep Learning on Graphs
  15. spring cloud 2020.0.3 学习记录(四)配置中心config以及bus实现自动配置更新
  16. 拼多多获得搜索词推荐 API
  17. NYNU ACM 蓝桥杯选拔赛 解题报告
  18. 公司内部培训的一些收获
  19. 08 在ATmega8中真实可用的ADC转换器写法
  20. [海豹海边爆]Daimayuan554

热门文章

  1. 通过实例学Python爬虫(一)——认识HTML网页与爬虫基础框架
  2. 二 Python 基本数据类型
  3. Android中@GuardedBy
  4. 页错误异常处理(page fault)的实现
  5. 慕思618静悄悄,暴利生意做不下去了?
  6. springmvc mvn搭建
  7. TODA项目Part1—后端项目设置与连接数据库
  8. 404页面是什么意思?怎么正确设置?
  9. IE下载文件无法弹出下载框
  10. 【蓝桥杯】基础练习 字母图形