在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"}]}
参考文章
相关推荐
< dependency> < groupId>com.suse.salt</ groupId> < artifactId>salt-netapi-client</ artifactId> < version>0.18.0</ version></ dependency>代码示例有一些基本的可帮助您入门该库。贡献始终欢迎请求请求,请...
盐,这里指的应该是SaltStack,一个开源的自动化运维平台,用于远程系统管理和配置。"salt-book" 可能是一个关于SaltStack入门的学习资源或教程集合。由于标签为空,我们无法获得更多具体信息,但我们可以根据"预订...
此外,SaltStack 还提供了事件驱动的架构,允许实时响应系统变化,以及通过 Salt API 和 Salt Wheel 模块与其他系统集成,实现更复杂的自动化任务。 总结来说,SaltStack 是一款强大的工具,它使得运维人员能够高效...
使用 Mongo 和 Express 的 Node starter REST 服务此 repo 是基于 Node 的 REST 服务的入门工具包,并附带 API 以使用 Redis 支持的会话创建和登录用户您可以在下添加特定于您的应用程序的应用程序接口用户和会话...
- **部署简便**:SaltStack易于部署和管理,降低了入门门槛。 - **跨平台支持**:兼容大部分UNIX/Linux及Windows操作系统环境。 - **主从架构**:采用主从架构实现集中化管理。 - **简单易用**:配置简单且功能强大...
6. 支持 API 及自定义模块,可通过 Python 轻松扩展 核心功能 1. 使命令发送到远程系统是并行的而不是串行的 2. 使用安全加密的协议 3. 使用最小最快的网络载荷 4. 提供简单的编程接口架构 组件 1. Master:控制...
这需要在开发过程中遵循安全编码原则,并使用安全的API接口。 9. **数据库设计**:源码中可能包含用户表、消息表、好友关系表等多个数据库表,涉及到关系数据库设计和优化,如索引的使用。 10. **测试与调试**:...
15. Servlet API集成 127 15.1 Servlet 2.5+集成 127 15.1.1 HttpServletRequest.getRemoteUser() 127 15.1.2 HttpServletRequest.getUserPrincipal() 127 15.1.3 HttpServletRequest.isUserInRole(String) ...
描述中提到的 "reclass 自述文件" 指的是项目提供的官方文档,通常包含了关于 reclass 工具的详细介绍、安装指南、使用方法和示例。用户可以通过查阅这些文档来学习如何利用 reclass 进行节点分类和管理。 **标签...
它使用以下来源的API:入门雷迪斯确保Redis在本地运行: sudo apt-get install redis-server或通过手动安装-确保阅读“保护Redis”部分,尤其是如果您手动安装Redis。应用依赖和构建npm installnpm run build 证书...
民主 Express&Angular应用程序,用于向参议院和众议院成员发送消息 ... 运行npm install生成用于加密IP地址的盐,并将其存储在local.json文件中,位于:SERVER> CREDENTIALS> IP> SALT var bcrypt
我们首先定义API的URL地址,然后随机生成一个盐值(salt),并将其与appid、待翻译的英文字符串(en_str)、盐值和密钥(secretKey)一起通过get_md5函数计算出一个签名(sign)。这个签名是百度翻译API要求的验证...
6. `README.md`:项目介绍、安装指南和快速入门。 在实际项目中,密码管理客户端可能会包含以下功能: - 用户注册与登录系统,通过电子邮件或用户名验证身份。 - 加密存储密码,使用强加密算法如AES。 - 密码生成器...
首先,易语言是一种以中文作为编程语法的编程环境,旨在降低编程入门难度,提高中国程序员的开发效率。PHP则是一种广泛应用的开源脚本语言,尤其在网络开发中,常用于服务器端的数据处理。当易语言需要与PHP进行通信...
它的核心理念是“易学、易用、易开发”,语法结构直观,通过中文词汇进行编程,降低了编程入门的门槛。 二、文本加解密原理 文本加解密是信息安全领域的重要组成部分,主要目的是保护数据的隐私性和完整性。常见的...