LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 脚本编程 >

基于tornado的salt-api

时间:2013-08-05 11:24来源:opython.com/?p=95 编辑:opython 点击:
salt 提供了一个叫做salt-api的项目,地址在 这里 。 它基本上是一个salt的SDK,并且默认实现了一个REST风格的API。这个API是使用cherrypy框架。 我不清楚是否有人真的将他成功跑起来,但是
salt 提供了一个叫做salt-api的项目,地址在这里。 它基本上是一个salt的SDK,并且默认实现了一个REST风格的API。这个API是使用cherrypy框架。

我不清楚是否有人真的将他成功跑起来,但是我尝试使用uwsgi和apache的mod_wsgi都无法成功运行。作为一个有各种各样python框架丰富部署经验的人来说,都无法将它启动,并且它的代码很久没有更新,所以我认为它基本上是不可用的。

我fork了这个项目,使用tornado实现了一个与默认cherrypy实现大部分兼容的API。地址:https://github.com/vansention/salt-api
运行和调用

因为tornado的关系,运行它很简单,进入 salt-api/saltapi/netapi/rest_tornado/
python main.py -bind=0.0.0.0 -port=8000
它需要安装tornado才能运行。

salt-api提供了PAM的方式进行认证和权限划分。关于PAM,请移步 这里 。
编辑 salt master 的配置文件 /etc/salt/master , 编辑 external_auth 那一部分,指定用户和他所拥有的权限。
external_auth:
 pam:
  saltuser:
  - 'grains.*'
  - 'state.*'
  - 'status.*'
意思是,saltuser用户可以执行 grains,state,status 三个模块。

API 是通过cookie记录认证信息的,所以调用一定要保存cookie。
我们调用api的时候首先需要认证,发送请求给 /login
% curl -si localhost:8000/login \\
     -H "Accept: application/json" \\
     -d username='saltuser' \\
     -d password='saltpass' \\
     -d eauth='pam'
如果成功,返回类似是这样
{"return": {
      "token": "6d1b722e",
      "start": 1363805943.776223,
      "expire": 1363849143.776224,
      "user": "saltuser",
      "eauth": "pam",
      "perms": [
          "grains.*",
          "status.*",
          "sys.*",
          "test.*"
         ]
}}
通过了认证,就可以直接发送lowstate来调用salt的各种功能了。 关于lowstate,请看这里 这里。

比如,我们实现类似于
salt EXAMPLE.COM test.ping
通过API
 % curl -si https://localhost:8000 \\
        -H "Accept: application/x-yaml" \\
        -H "X-Auth-Token: d40d1e1e" \\
        -d client=local \\
        -d tgt='*' \\
        -d fun='test.ping' \\
        -d arg
基本上,通过lowstate,就可以实现像本地操作salt一样实现各种调用。

转载请保留固定链接: https://linuxeye.com/program/1881.html

------分隔线----------------------------
标签:salt-apitornado
栏目列表
推荐内容