从零开始搭建Salt Web之初探salt-api
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: 8080
host: 0.0.0.0
# disable_ssl: True # 若使用http协议,去掉注释,并注释下列两行
ssl_crt: conf/cert.pem
ssl_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之后,有两种使用方式:
- 基于cookie的session
- 在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 Web之初探salt-api的更多相关文章
- 【从零开始搭建自己的.NET Core Api框架】(一)创建项目并集成swagger:1.1 创建
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- 【从零开始搭建自己的.NET Core Api框架】(七)授权认证进阶篇
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- 【从零开始搭建自己的.NET Core Api框架】(四)实战!带你半个小时实现接口的JWT授权验证
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- 从零开始搭建.NET Core 2.0 API(学习笔记一)
从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...
- 【从零开始搭建自己的.NET Core Api框架】(五)由浅入深详解CORS跨域机制并快速实现
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- 搭建一个Web API项目(DDD)
传送阵:写在最后 一.创建一个能跑的起来的Web API项目 1.建一个空的 ASP.NET Web应用 (为什么不直接添加一个Web API项目呢,那样会有些多余的内容(如js.css.Areas等 ...
- 读《架构探险——从零开始写Java Web框架》
内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...
- 从零开始搭建Prometheus自动监控报警系统
从零搭建Prometheus监控报警系统 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开 ...
- 【运维技术】从零开始搭建开发使用的Kafka环境
[原创]从零开始搭建开发使用的Kafka环境 入门资料 百度百科: Kafka是一种高吞吐量的分布式发布订阅消息系统,这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 对于像Hadoop ...
随机推荐
- js原生常用事件event
onblur 元素失去焦点: onchange用户改变域的内容: onclick鼠标点击对象: onerror当加载图片时发生错误: onfocus 元素获得焦点: onkeypress某个键盘的键被 ...
- GSP事件探查器 无法进行跟踪的解决办法(场景之一)
使用GSP事件探查器 可以快速的定位问题, 跟踪效果很好 但是有时会出现 无法新建跟踪的问题. 这里有一个比较常见的解决办法 问题现象: 新建跟踪无效. 解决办法 其实就三步: 1. 打开 servi ...
- Jfrog Maven jenkins pipeline 流水线 培训 简单实验
1. 公司购买了一套jfrog artifactory ,然后厂商组织了一次培训 本次简单记录一下 jenkins和jfrog 二进制仓库的简单连接使用 2. 前期环境准备. scp jdk的tar包 ...
- [转帖]Nginx安装及配置详解 From https://www.cnblogs.com/zhouxinfei/p/7862285.html
Nginx安装及配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...
- JavaScript DOM方法表格添加删除
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- git 在局域网新建远程库及本地开发常用命令
git 版本直接在官网下载即可:https://git-scm.com/downloads 安装后有git bash与git gui可以用. 1.在远程服务器上新建裸仓库 git init --ba ...
- BZOJ4652 NOI2016循环之美(莫比乌斯反演+杜教筛)
因为要求数值不同,不妨设gcd(x,y)=1.由提示可以知道,x/y是纯循环小数的充要条件是x·klen=x(mod y).因为x和y互质,两边同除x,得klen=1(mod y).那么当且仅当k和y ...
- MT【219】构造二次函数
(2012北大保送)已知$f(x)$是二次函数,且$a,f(a),f(f(a)),f(f(f(a)))$是正项等比数列;求证:$f(a)=a$ 构造二次函数$f(x)=qx$,则$a,f(a),f(f ...
- 自学Zabbix4.3 zabbix实战监控Web网站性能
自学Zabbix4.3 zabbix实战监控Web网站性能 用zabbix如何监控web性能和可用性呢?一般分为四个步骤:打开网站.登陆.登陆验证.退出,看实例. 1. 检测流程 1. 打开网站:如果 ...
- 沉迷Link-Cut tree无法自拔之:[BZOJ3514] Codechef MARCH14 GERALD07 加强版
来自蒟蒻 \(Hero \_of \_Someone\) 的 \(LCT\) 学习笔记 $ $ 又是一道骚题...... 先讲一个结论: 假设我们用 \(LCT\) 来做这道题, 在插入边 \(i\) ...