安装

# yum -y install salt-api

更改配置

vim /etc/salt/master

把默认的注释掉  我们这边默认配置文件目录是/srv/salt

default_include: master.d/*.conf

创建目录

#cd /etc/salt
# mkdir master.d/
# cd master.d/

创建两个文件和添加配置

# cat api.conf
rest_cherrypy:
host: 0.0.0.0
port:
debug: true
disable_ssl: true # cat eauch.conf
external_auth:
pam:
saltapi:
- .*
- '@wheel'
- '@runner'

创建用户

# useradd saltapi
# echo | passwd --stdin saltapi

重启salt-api

# /etc/init.d/salt-api restart
Stopping salt-api daemon: [FAILED]
Starting salt-api daemon: [ OK ]
# /etc/init.d/salt-master restart
Stopping salt-master daemon: [FAILED]
Starting salt-master daemon: [ OK ]

然后进行测试 是否安装成功

# curl -k http://10.20.0.100:8080/login -H "Accept: application/x-yaml" -d username='saltapi' -d password='123123'  -d eauth='pam'
return:
- eauth: pam
expire: 1474258659.0838921
perms:
- .*
- '@wheel'
- '@runner'
start: 1474215459.0838921
token: 69bb58e4b6bb2026369a40fc40184a88e7472054
user: saltapi

返回了token值 以后需要调用就可以直接用token值

我们试试 cmd.run模块

# curl -k http://10.20.0.100:8080 -H "Accept: application/x-yaml" -H "X-Auth-Token: 69bb58e4b6bb2026369a40fc40184a88e7472054" -d client='local' -d tgt='*' -d fun='cmd.run' -d arg='free -m'
return:
- salt-minion-: ' total used free shared buffers cached Mem: -/+ buffers/cache: Swap: '
salt-minion-: ' total used free shared buffers cached Mem: -/+ buffers/cache: Swap: '

测试成功 可以返回信息

获取所有的minion_key

# curl -k http://10.20.0.100:8080/ -H "Accept: application/x-yaml" -H  "X-Auth-Token: 69bb58e4b6bb2026369a40fc40184a88e7472054" -d client='wheel'  -d fun='key.list_all'
return:
- data:
_stamp: '2016-09-18T17:14:28.666376'
fun: wheel.key.list_all
jid: ''
return:
local:
- master.pem
- master.pub
minions:
- salt-minion-
- salt-minion-
minions_denied: []
minions_pre: []
minions_rejected: []
success: true
tag: salt/wheel/
user: saltapi
tag: salt/wheel/20160919011427038345

写在第三方调用Salt Api接口 更方便

#!/usr/bin/env python
#_*_ coding:utf8 _*_ import urllib,urllib2,json
import ssl
import json
import re class SaltAPI:
__token_id = ''
def __init__(self,url,username,password):
self.__url = url.rstrip('/') # 移除URL末尾的/
self.__username = username
self.__password = password
# self.__token_id = self.SaltLogin() def token_id(self):
#获取tokenid的请求数据
'''
/login
###########获取token链接###########
curl -k http://10.20.0.100:8080/login -H "Accept: application/x-yaml" -d username='saltapi' -d password='123123' -d eauth='pam'
return:
- eauth: pam
expire: 1474612524.6610701
perms:
- .*
- '@wheel'
- '@runner'
start: 1474569324.6610689
token: a13e4a29020acc47c19f73a7337165280cbdfbd1
user: saltapi 返回的token
'''
params = {'eauth': 'pam', 'username': self.__username, 'password': self.__password}
#讲请求的类型转成例如:
#password=salt&eauth=pam&username=salt
encode = urllib.urlencode(params)
obj = urllib.unquote(encode)
content = self.PostRequest(obj,prefix='/login')
try:
#获取到返回的token
self.__token_id = content['return'][]['token']
except KeyError:
raise KeyError #推送请求
def PostRequest(self, obj, prefix='/'):
url = self.__url + prefix
headers = {'X-Auth-Token': self.__token_id}
req = urllib2.Request(url,obj, headers) # obj为传入data参数字典,data为None 则方法为get,有date为post方法
response = urllib2.urlopen(req)
content = json.loads(response.read())
return content #获取所以的key的类型
def list_all_key(self):
params = {'client':'wheel','fun':'key.list_all'}
obj = urllib.urlencode(params)
self.token_id()
content = self.PostRequest(obj)
minions = content['return'][]['data']['return']['minions']
minions_pre = content['return'][]['data']['return']['minions_pre']
return minions,minions_pre
#删除KEY 节点
def delete_key(self,node_name):
params = {'client': 'wheel', 'fun': 'key.delete', 'match': node_name}
obj = urllib.urlencode(params)
self.token_id()
content = self.PostRequest(obj)
ret = content['return'][]['data']['success']
return ret #同意Key 节点
def accept_key(self,node_name):
params = {'client': 'wheel', 'fun': 'key.accept', 'match': node_name}
obj = urllib.urlencode(params)
self.token_id()
content = self.PostRequest(obj)
ret = content['return'][]['data']['success']
return ret def remote_noarg_execution(self,tgt,fun):
params = {'client': 'local', 'tgt': tgt, 'fun': fun}
obj = urllib.urlencode(params)
self.token_id()
content = self.PostRequest(obj)
ret = content['return'][][tgt]
return ret def remote_exexution(self,tgt,fun,arg):
params = {'client': 'local', 'tgt': tgt, 'fun': fun, 'arg': arg}
obj = urllib.urlencode(params)
self.token_id()
content = self.PostRequest(obj)
ret = content['return'][][tgt]
return ret def target_remote_execution(self,tgt,fun,arg):
params = {'client': 'local', 'tgt': tgt, 'fun': fun, 'arg': arg, 'expr_form': 'nodegroup'}
obj = urllib.urlencode(params)
self.token_id()
content = self.PostRequest(obj)
jid = content['return'][]['jid']
return jid #应用部署
def app_deploy(self,tgt,arg):
params = {'client': 'local', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg}
obj = urllib.urlencode(params)
self.token_id()
content = self.PostRequest(obj)
return content def async_deploy(self,tgt,arg):
params = {'client': 'local_async', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg}
obj = urllib.urlencode(params)
self.token_id()
content = self.PostRequest(obj)
jid = content['return'][]['jid']
return jid def target_deploy(self,tgt,arg):
params = {'client': 'local_async', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg, 'expr_form': 'nodegroup'}
obj = urllib.urlencode(params)
self.token_id()
content = self.PostRequest(obj)
jid = content['return'][]['jid']
return jid # # 获取grains
# def SaltMinions(self, minion=''):
# if minion and minion != '*':
# prefix = '/minions/' + minion
# else:
# prefix = '/minions'
# res = self.PostRequest(None, prefix)
# return res
# # 获取events
#
#
# def SaltEvents(self):
# prefix = '/events'
# res = self.PostRequest(None, prefix)
# return res # def main():
# sapi = SaltAPI(url='http://10.20.0.100:8080',username='saltapi',password='')
# sapi.token_id()
# print sapi.list_all_key()
# #sapi.delete_key('test-01')
# #sapi.accept_key('test-01')
# #sapi.deploy('test-01','nginx')
# print sapi.remote_noarg_execution('salt-minion-01','grains.items')
#
# if __name__ == '__main__':
# main()

CentOS 安装及配置Salt api的更多相关文章

  1. CentOS安装与配置LNMP

    本文PDF文档下载:http://www.coderblog.cn/doc/Install_and_config_LNMP_under_CentOS.pdf 本文EPUB文档下载:http://www ...

  2. (转)RedHat/CentOS安装和配置kerberos

    RedHat/CentOS安装和配置kerberos 需要在kerberos server和客户端都先安装ntp (Internet时间协议,保证服务器和客户机时间同步 ) 1  kerberos 服 ...

  3. centos 安装和配置 rabbitmq

    centos 安装 rabbitmq 1.rabbitmq是erlang语言开发的,安装前首先需要安装erlang# yum install erlang -y // 直接安装可能报错,# yum i ...

  4. 烂泥:CentOS安装及配置TFTP服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 为什么要学习有关TFTP服务器的安装及配置呢?主要是为了后续学习有关linux系统的无人值守安装做准备. TFTP简单文件传输协议,使用UDP的69端口 ...

  5. centos安装及配置

    centos安装 从网上下载最新的版本,用ultraiso做好系统盘,启动.安装过程没有什么可以说的,与其他发行版有点不同的是需要将安装包放到u盘根目录下(u盘容量最好大点,8~16G最好).开始没注 ...

  6. Linux、Ubuntu、CentOS安装和配置zsh

    目录 01 zsh的安装 02 配置zsh 2.1 安装oh-my-zsh 2.2 查看oh-my-zsh目录 2.3 oh-my-zsh 插件的管理 2.3.1 添加插件 2.3.2 zsh-aut ...

  7. 阿里云centos 安装和配置 DokuWiki

    安装 1) 添加虚拟主机:由于我的 阿里云CentOs服务器 安装了oneinstack的一键部署PHP.JAVA.Nginx等环境,所以域名配置很方便,照着文档一步一步做就可以了 cd /root/ ...

  8. 烂泥:centos安装及配置DNS服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要在centos配置DNS服务器,要先安装DNS软件BIND.当然我们也可以安装其他的DNS软件,比如国内的开源DNS软件DNSPod. 在此我们以通过 ...

  9. Hadoop 安装(1) CENTOS 安装与配置

    配置虚拟机,名字 Hadoop_Slave4,内存为1024MB,15GB. 进入安装centos. 配置Hostname: Slave4.Hadoop 配置网络,设置静态IP:192.168.1.2 ...

随机推荐

  1. java线程condition

    子线程先执行一段代码,再主线程再执行一段代码,两个线程都循环执行50遍.用2个condition来实现,一个是子线程的condition,一个是主线程的condition,代码如下: package ...

  2. 【LeetCode】456. 132 Pattern

    Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that  ...

  3. Java Object 对象创建的方式 [ 转载 ]

    Java Object 对象创建的方式 [ 转载 ] @author http://blog.csdn.net/mhmyqn/article/details/7943411 显式创建 有4种显式地创建 ...

  4. 2、Spring的 IoC详解(第一个Spring程序)

    Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.在这句话中重点有两个,一个是IoC,另一个是AOP.今天我们讲第一个IoC. IoC概念 ...

  5. bug记录_signalr执行$.connnection.testhub结果为空

    最后发现配置文件<appSettings>中多了一句<add key="owin:AutomaticAppStartup" value="false&q ...

  6. Andorid第三方库

    博客: http://blog.csdn.net/codywangziham01/article/details/11818559#t8 RoboGuice: http://www.importnew ...

  7. 有关下行HARQ的一切

    1. 对于下行HARQ,有几种类型的下行传输需要UE反馈ACK/NACK 动态调度的下行传输:UE收到一个使用C-RNTI或TC-RNTI(对应随机接入过程中的Msg4)加扰的PDCCH和PDSCH, ...

  8. Visual Studio 2013 新增web项目IIS Express的64位版   转载来源http://www.cnblogs.com/jianyus/p/3524335.html

    使用Visual Studio 2012开发SharePoint的应该都遇到过下面的错误“SharePoint 在32位进程中不受支持”,而怎么修改目标平台都不好使,因为VS 2012所配备的IIS ...

  9. POJ 3279 Fliptile[二进制状压DP]

    题目链接[http://poj.org/problem?id=3279] 题意:给出一个大小为M*N(1 ≤ M ≤ 15; 1 ≤ N ≤ 15) 的图,图中每个格子代表一个灯泡,mp[i][j] ...

  10. HDU 5826 physics

    该问题和xi,di均无关,碰撞只会使得速度反向,大小不会变.因此只要计算速度. #pragma comment(linker, "/STACK:1024000000,1024000000&q ...