Salt-API安装配置及使用

Python3使用saltstack和salt-api

安装python3

    1. tar zxvf Python-3.5.1.tgz   
    2. cd  Python-3.5.1        
    3. ./configure
    4. make
    5. make install
    6. mv  /usr/bin/python /usr/bin/python2 # 如果是软连接,可以直接删除
    7. ln -s /usr/local/bin/python3.5 /usr/bin/python
    8. vim /usr/bin/yum   # 修改Yum,使yum依然有效,yum依靠老版本的python
    9. #!/usr/bin/python 修改为#!/usr/bin/python2
        
# 修改完/usr/bin/yum 依然还有问题,可以尝试修改/usr/libexec/urlgrabber-ext-down的文件python抬头

安装 salt-api

yum install salt-api -y

配置

生成自签名证书(用于ssl)
cd  /etc/pki/tls/certs
# 生成自签名证书, 过程中需要输入key密码及RDNs
make testcert
cd /etc/pki/tls/private/
# 解密key文件,生成无密码的key文件, 过程中需要输入key密码,该密码为之前生成证书时设置的密码
openssl rsa -in localhost.key -out localhost_nopass.key
创建用于salt-api的用户
useradd -M -s /sbin/nologin salt-api
echo "salt-api" | passwd salt-api —stdin
修改/etc/salt/master文件
sed -i '/#default_include/s/#default/default/g' /etc/salt/master  
mkdir /etc/salt/master.d 
新增配置文件/etc/salt/master.d/api.conf
cat /etc/salt/master.d/api.conf
rest_cherrypy:
  port: 8000
  ssl_crt: /etc/pki/tls/certs/localhost.crt
  ssl_key: /etc/pki/tls/private/localhost_nopass.key
新增配置文件/etc/salt/master.d/eauth.conf
cat /etc/salt/master.d/eauth.conf  
external_auth:  
  pam:  
    salt-api:  
      - .*  
      - '@wheel'  
      - '@runner' 
启动salt-master and salt-api
systemctl start salt-master
systemctl start salt-api
安装一个salt client
yum install salt-minion -y
修改配置
sed -i "/^#master: salt/c master: 192.168.104.76"  /etc/salt/minion
启动 client
systemctl start salt-minion
master 上接受key
[root@node76 salt]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
node76
Rejected Keys:
[root@node76 salt]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
node76
Proceed? [n/Y] Y
Key for minion node76 accepted.
[root@node76 salt]# salt-key -L
Accepted Keys:
node76
Denied Keys:
Unaccepted Keys:
Rejected Keys:

api使用

使用curl 获取token
 curl -k https://192.168.104.76:8000/login -H "Accept: application/x-yaml"  -d username='salt-api' -d password='salt-api'  -d eauth='pam'
return:
- eauth: pam
  expire: 1520269544.2591
  perms:
  - .*
  - '@wheel'
  - '@runner'
  start: 1520226344.259099
  token: 593a7224f988f28b84d58b7cda38fe5e5ea07d98
  user: salt-api
参数解释:
--sslv3 指定sslv3版本
-k      忽略证书获取https内容
-s      指定使用静默(silent)方式
-i      指定SaltAPI收到服务器返回的结果同时显示HTTP Header。
-H      指定一个特定的Header给远端服务器,当SaltAPI 需要发送appliton-tion/json Header时。会以我们希望的JSON格式返回结果
-d      想远端服务器发送POST请求,以key=value的格式发送 ,注意key=v时,必须紧挨=号两边
  • 获取token后就可以使用token通信
  • 注:重启salt-api后token改变
测试minion端的联通性
  • 下面功能类似于“salt '*' test.ping”
curl -k https://192.168.104.76:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9" -d client='local' -d tgt='*' -d fun='test.ping' 
return:
- node76: true
参数解释:
client : 模块,python处理salt-api的主要模块,‘client interfaces <netapi-clients>’
    local : 使用‘LocalClient <salt.client.LocalClient>’ 发送命令给受控主机,等价于saltstack命令行中的'salt'命令
    local_async : 和local不同之处在于,这个模块是用于异步操作的,即在master端执行命令后返回的是一个jobid,任务放在后台运行,通过产看jobid的结果来获取命令的执行结果。
    runner : 使用'RunnerClient<salt.runner.RunnerClient>' 调用salt-master上的runner模块,等价于saltstack命令行中的'salt-run'命令
    runner_async : 异步执行runner模块
    wheel : 使用'WheelClient<salt.wheel.WheelClient>', 调用salt-master上的wheel模块,wheel模块没有在命令行端等价的模块,但它通常管理主机资源,比如文件状态,pillar文件,salt配置文件,以及关键模块<salt.wheel.key>功能类似于命令行中的salt-key。
    wheel_async : 异步执行wheel模块
    备注:一般情况下local模块,需要tgt和arg(数组),kwarg(字典),因为这些值将被发送到minions并用于执行所请求的函数。而runner和wheel都是直接应用于master,不需要这些参数。
tgt : minions
fun : 函数
arg : 参数
expr_form : tgt的匹配规则
    'glob' - Bash glob completion - Default
    'pcre' - Perl style regular expression
    'list' - Python list of hosts
    'grain' - Match based on a grain comparison
    'grain_pcre' - Grain comparison with a regex
    'pillar' - Pillar data comparison
    'nodegroup' - Match on nodegroup
    'range' - Use a Range server for matching
    'compound' - Pass a compound match string
执行远程命令
  • 下面功能类似于“salt '*' cmd.run ifconfig”
curl -k https://192.168.104.76:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9" -d client='local' -d tgt='*' -d fun='cmd.run'   -d arg='uptime'
return:
- node76: ' 13:18:46 up 161 days,  2:23,  1 user,  load average: 0.15, 0.09, 0.10'
使用state.sls
  • 下面功能类似于“salt '*' state.sls ifconfig”
 curl -k https://192.168.104.76:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9" -d client='local' -d tgt='*' -d fun='state.sls' -d arg='ifconfig'
return:
- node76:
        cmd_|-ifconfig_|-ifconfig_|-run:  
      __run_num__: 0  
      changes:  
        pid: 30954  
        retcode: 0  
        stderr: ''  
        stdout: "eth2      Link encap:Ethernet  HWaddr 00:50:56:B5:5C:28  \n     \  
          \     inet addr:192.168.90.63  Bcast:192.168.90.255  Mask:255.255.255.0\n\  
          \          inet6 addr: fe80::250:56ff:feb5:5c28/64 Scope:Link\n        \  
          \  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:825051\  
          \ errors:0 dropped:0 overruns:0 frame:0\n          TX packets:434351 errors:0\  
          \ dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:1000\  
          \ \n          RX bytes:60353823 (57.5 MiB)  TX bytes:27062672 (25.8 MiB)\n\  
          \nlo        Link encap:Local Loopback  \n          inet addr:127.0.0.1 \  
          \ Mask:255.0.0.0\n          inet6 addr: ::1/128 Scope:Host\n          UP\  
          \ LOOPBACK RUNNING  MTU:16436  Metric:1\n          RX packets:808 errors:0\  
          \ dropped:0 overruns:0 frame:0\n          TX packets:808 errors:0 dropped:0\  
          \ overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n         \  
          \ RX bytes:59931 (58.5 KiB)  TX bytes:59931 (58.5 KiB)"  
      comment: Command "ifconfig" run  
      duration: 11.991  
      name: ifconfig  
      result: true  
      start_time: '13:59:06.334112'  
使用Targeting
  • 下面功能类似于"salt -L '192.168.90.61,192.168.90.63' test.ping"
 curl -k https://192.168.104.76:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9"  -d client='local' -d tgt='node76'  -d expr_form='list'  -d fun='test.ping' 
return:
- node76: true
以json格式输出
curl -k https://192.168.104.76:8000 -H "Accept: application/json" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9"  -d client='local' -d tgt='node76'  -d fun='cmd.run' -d arg='uptime'
{"return": [{"node76": " 13:25:20 up 161 days,  2:30,  1 user,  load average: 0.01, 0.06, 0.08"}]}
使用jobs
 curl -k -s https://192.168.104.76:8000/jobs/20180306112645047796 -H "Accept: application/x-yaml" -H "X-Auth-Token: a7f8b2fab2bfb05334f8a314d97925c1bec1d14c" 
info:
- Arguments:
  - uptime
  Function: cmd.run
  Minions:
  - node76
  Result:
    node76:
      return: ' 11:26:45 up 162 days, 31 min,  1 user,  load average: 0.12, 0.07,
        0.08'
  StartTime: 2018, Mar 06 11:26:45.047796
  Target: node76
  Target-type: glob
  User: salt-api
  jid: '20180306112645047796'
return:
- node76: ' 11:26:45 up 162 days, 31 min,  1 user,  load average: 0.12, 0.07, 0.08'
#结果
curl -k -s https://192.168.104.76:8000/jobs/20180306112645047796 -H "Accept: application/x-yaml" -H "X-Auth-Token: a7f8b2fab2bfb05334f8a314d97925c1bec1d14c" 
info:
- Arguments:
  - uptime
  Function: cmd.run
  Minions:
  - node76
  Result:
    node76:
      return: ' 11:26:45 up 162 days, 31 min,  1 user,  load average: 0.12, 0.07,
        0.08'
  StartTime: 2018, Mar 06 11:26:45.047796
  Target: node76
  Target-type: glob
  User: salt-api
  jid: '20180306112645047796'
return:
- node76: ' 11:26:45 up 162 days, 31 min,  1 user,  load average: 0.12, 0.07, 0.08'

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据实战演练

ambari的服务启动顺序如何设置

角色是组件的另一个名称(例如:NAMENODE,DATANODE,RESOURCEMANAGER,HBASE_MASTER等)。 顾名思义,可以告诉Ambari...

2352
来自专栏张善友的专栏

TCP/IP 选项TcpTimedWaitDelay设置

当TCP连接被关闭时,{ Protocol, Local IP, Local Port, Remote IP, Remote Port}五元组就进入TIME_W...

2129
来自专栏编程

这款高并发应用框架实在太好用了,伙伴们你造吗?

Titan 框架开发快速入门 Titan Framework是通过Actor模型使用响应式消息传输模式,提供具有高性能、高响应、高可伸缩和高韧性的并发应用框架。...

22110
来自专栏乐沙弥的世界

配置ORACLE 客户端连接到数据库

Oracle 客户端连接到Oracle 数据库服务器貌似不同于SQL serve中的网络配置,其实不然,只不过所有的SQL server 运行于Windows...

1253
来自专栏乐沙弥的世界

基于Linux (RHEL 5.5) 安装Oracle 10g RAC

    本文所描述的是在Red Hat 5.5下使用vmware server 来安装Oracle 10g RAC(OCFS + ASM),本文假定你的RHEL...

1323
来自专栏芋道源码1024

IntelliJ IDEA JDK 8 性能调优

IntelliJ IDEA 问题描述问题原因解决方法调优后观察为什么要选择用户`idea.vmoptions`文件

1332
来自专栏IT笔记

SpringBoot开发案例之微信小程序文件上传

最近在做一个口语测评的小程序服务端,小程序涉及到了音频文件的上传,按理说应该统一封装一个第三方上传接口服务提供给前段调用,但是开发没有那么多道理,暂且为了省事就...

6787
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (5)

之前的配置都是在内存中, 下面将如何把这些数据存储到Sql Server数据库, 这样更适合生产环境. 这部分基本完全参考官方文档: https://ident...

3645
来自专栏大闲人柴毛毛

手把手0基础项目实战(三)——教你开发一套电商平台的安全框架

写在最前 本文是《手把手项目实战系列》的第三篇文章,预告一下,整个系列会介绍如下内容: 《手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(S...

4466
来自专栏腾讯Bugly的专栏

《Android外部存储》

| 导语 外部存储作为开发中经常接触的一个重要系统组成,在Android历代版本中,有过许许多多重要的变更。我也曾疑惑过,为什么一个简简单单外部存储,会存在存在...

5425

扫码关注云+社区