• state

  1)state介绍

state是saltstack最核心的功能,通过预先指定好的sls文件对minion进行状态管理,支持pkg, file, network, service, user等。

  2)配置管理 nginx  

vim /etc/salt/master
找到:file_roots:
在file_roots目录下,vim top.sls
base:
'*':
- nginx
vim nginx.sls
nginx-service:
pkg:
- installed
service:
- running
- require:
- pkg: nginx
- enable: True
nginx-service:是id名字,自定义。pkg: 函数 installed:代表没有安装的通过yum或者apt-get安装,running:启动,enable:开机启动:require:确保只有在安装成功后才会启动。
执行state:
salt '*' state.highstate

3)配置管理文件
file_test:
file.managed:
- name: /tmp/aminglinux.com
- source: salt://test/123/1.txt
- user: root
- group: root
- mode: 644
说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的test相当于是/srv/salt/test

4)配置管理目录
file_dir:

file.recurse:
- name: /tmp/testdir
- source: salt://test/123
- user: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除
5)配置管理远程命令
cmd_test:
cmd.run:
- onlyif: test -f /tmp/111.txt
- names:
- touch /tmp/111.txt
- mkdir /tmp/1233
- user: root
还可以加unless,和onlyif正好相反
6)配置管理远程脚本
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root
cat /srv/salt/test/1.sh
#!/bin/bash
touch /tmp/111.txt
if [ -d /tmp/1233 ]
then
rm -rf /tmp/1233
fi
7)配置管理计划任务
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '*'
- hour: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'
注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。想要删除该cron,需要增加:
cron.absent:
- name: /bin/touch /tmp/111.txt
两者不能共存,要想删除一个cron,那之前的present就得去掉。
  • saltstack常用模块和API调用

1)API:(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

api的使用原理是通过调用master client模块,实例化一个LocalClient对象,在调用cmd()方法来实现。
以下是API实现test.ping的示例:
yum install -y salt-api
service salt-api restart
import salt.client
client = salt.client.LocalClient()
ret = client.cmd('*', 'test.ping')
print ret
返回形式是一个字典的形式返回
2)cmd模块
salt '*' cmd.run "free -m"
API:client.cmd('wms5test1.app.*', 'cmd.run', ['free -m'])
3)cp模块
file_roots:
base:
- /export/salt/root
salt根目录:在master中file_roots定义的路径,salt://test.txt相当于/export/salt/root/test.txt
salt 'wms5test1.app.172.17.23.176' cp.get_file salt://nscd.conf /tmp/xiang.txt
salt '*' cp.get_dir salt://test /tmp/ (目录)
API:client.cmd('*', 'cp.get_file', ['salt://test.txt', '/tmp/1.txt'])
4)cron模块
salt '*' cron.raw_cron root (查看定时任务)
salt '*' cron.set_job root '*' '*' '*' '*' 1 /export/scripts/rm_log.sh
salt '*' cron.rm_job root /export/scripts/rm_log.sh (写全没效果)
API:client.cmd('*', 'cron.set_job', ['root', '*', '*', '*', '*', 1 /export/scripts/rm_log.sh])

5)dnsutil模块

salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 xiang.com
salt '*' dnsutil.hosts_remove /etc/hosts xiang.com
API:client.cmd('*', 'dnsutil.hosts_append', ['/etc/hosts', '127.0.0.1', 'xiang.com'])
6)file模块
salt '*' file.chown /etc/passwd root root
salt '*' file.copy /path/to/src /path/to/dst
salt '*' file.file_exists /etc/hosts
salt '*' file.directory_exists /etc/
salt '*' file.get_mod /etc/passwd
salt '*' file.set_mod /etc/passwd 0644
salt '*' file.mkdir /tmp/test
salt '*' file.sed /export/servers/nginx/conf/nginx.conf 'debug' 'warn'
salt '*' file.append /tmp/test.txt "welcome xiang"
salt '*' file.remove /tmp/1.txt
API:client.cmd('*', 'file.remove', ['/tmp/1.txt'])
7)network模块
salt '*' network.dig www.qq.com
salt '*' network.ping www.qq.com
salt '*' network.ip_addrs
API:client.cmd('*', 'network.ip_addrs')
8)pkg包管理模块
管理yum, apt-get等
salt '*' pkg.install php
salt '*' pkg.remove php
salt '*' pkg.upgrade (升级所有的软件包)
API:client.cmd('*', 'pkg.remove, ['php']')
9)service模块
salt '*' service.enable nginx
salt '*' service.disable nginx
salt '*' service.restart nginx
API:client.cmd('*', 'service.stop', ['nginx'])
  • 练习

1)installApp.py

 1 def nginx():
 2     resultBean = dict()
 3     __salt__['cp.get_file']("salt:_shell/app/nginx.sh /usr/local/src/installnginx.sh")
 4     jid = __salt__['cmd.async']
 5     cmd = "sh /usr/local/src/installnginx.sh"
 6     status, output = commands.getstatusoutput(cmd)
 7     if status == 0:
 8         resultBean['code'] = 0
 9         resultBean['message'] = 'success'
10         resultBean['data'] = output
11     else:
12         resultBean['code'] = -1
13         resultBean['message'] = 'install nginx error'
14         resultBean['data'] = output
15     return resultBean
16
17 def tomcat():
18     pass
19
20 def keepalived():
21     pass
22
23 def lvs():
24     pass
25
26 def jdk():
27     pass
28
29 def mysql():
30     pass
31
32 def zookeeper():
33     pass
34
35 def redis():
36     pass

2)saltapi.py

 1 import json
 2 import requests
 3
 4
 5 class SaltServer(object):
 6     def __init__(self):
 7         self.session = requests.session()
 8         self.token = self.getToken()
 9
10
11     def getToken(self):
12         url =  "http://192.168.48.135:8000/login"
13         headers = {"Accept": "application/json"}
14         data = {
15             "username": "saltapi",
16             "password": "saltapi",
17             "eauth": "pam"
18         }
19         res = self.session.post(url=url, headers=headers, data=data)
20         text = res.text
21         result = json.loads(text)
22         token = result.get("return")[0].get("token")
23         return token
24
25     def runModules(self, minionid, fun, arg=None):
26         url = "http://192.168.48.135:8000"
27         data = {
28             "client": "local",
29             "tgt": minionid,
30             "fun": fun,
31             "arg": arg
32         }
33         resultBean = dict()
34         try:
35             res = self.session.post(url=url,  data=data)
36             text = res.text
37             data = json.loads(text).get("return")
38             resultBean['code'] = 0
39             resultBean['message'] = "success"
40             resultBean['data'] = data
41         except Exception as e:
42             resultBean['code'] = 0
43             resultBean['message'] = "success"
44             resultBean['data'] = e
45         finally:
46             return resultBean
47
48
49     def runRunner(self, fun, arg=None):
50         url = "http://192.168.48.135:8000"
51         data = {
52             "client": "runner",
53             "fun": fun,
54             "arg": arg
55         }
56         resultBean = dict()
57         try:
58             res = self.session.post(url=url,  data=data)
59             text = res.text
60             data = json.loads(text).get("return")
61             resultBean['code'] = 0
62             resultBean['message'] = "success"
63             resultBean['data'] = data
64         except Exception as e:
65             resultBean['code'] = 0
66             resultBean['message'] = "success"
67             resultBean['data'] = e
68         finally:
69             return resultBean

3)test.py

 1 from lesson31.util.saltapi import SaltServer
 2
 3 saltServer = SaltServer()
 4
 5 result1 = saltServer.runModules('192.168.48.129', 'cp.get_file', ['salt://_shell/app/nginx.sh', '/usr/local/src/installnginx.sh'])
 6 print(result1)
 7 result2 = saltServer.runModules('192.168.48.129', 'installApp.nginx')
 8 print(result2)
 9 # result2 = saltServer.runRunner('manage.status')
10 # print(result2)

转载于:https://www.cnblogs.com/karl-python/p/9265915.html

2018年7月3日笔记相关推荐

  1. 2018年7月7日笔记整理

    2018年7月7日星期六 操作系统: Operating System 简称OS 软硬件资源的管理者,是世界上最复杂的软件 主流操作系统: PC机:Windows,  OS X(基于Unix),  L ...

  2. 2018年4月26日笔记

    内置模块:hashlib Python的hashlib提供了常见的摘要算法,如md5,sha1, sha224, sha256, sha384, sha512等等,其中md5最为常用. 什么是摘要算法 ...

  3. 2018年3月29日笔记

    python数据类型:字符串string"" .元组tuple() .列表list[].字典dict{} 字符串可用单引号(' ')或双引号(" ")或三引号( ...

  4. 2018年4月22日笔记

    类封装的一般形式 class A(object): pass def main(): a = A() if __name__ = '__main__': main() 何为异常? 一般情况下,在Pyt ...

  5. 2018年7月5日笔记

    ansible是什么? Ansible 简单的说是一个配置管理系统(configuration management system).你只需要可以使用 ssh 访问你的服务器或设备就行.它也不同于其他 ...

  6. 2018年6月26日笔记

    salt简介 是一个配置管理工具,使用轻量级的通讯器ZMQ(ZeroMQ),使用Python写成的批量管理工具,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,叫Salt State Sys ...

  7. 2018年7月1日笔记

    pillar Pillar在salt中是非常重要的组成部分,利用它可以完成很强大的功能,它可以指定一些信息到指定的minion上,不像grains一样是分发到所有Minion上的,它保存的数据可以是动 ...

  8. 2018年6月14日笔记

    requests.post() 一般用法 1 import requests 2 3 wd = "python" 4 params = {"wd": " ...

  9. 2018年7月20日日报

    姓名:任光烨 日期:2018年7月20日 今日学习任务:学习Linux操作指令,在Linux环境下完善通讯录程序,用*输出sin cos函数等. 今日完成情况:都已完成,200~300代码. 今日开发 ...

最新文章

  1. 脑电分析系列[MNE-Python-16]| 脑电数据的Epoching处理
  2. 取得前九条之后的数据
  3. 【学习笔记】含委托加工(转包)的标准成本估算
  4. Spring中的InitializingBean的使用详解
  5. vue中展示列表,类似formatter方法及在vue中点击页面信息事件
  6. XShell远程连接LInux服务器(地址端口映射方法)
  7. dp线和hdmi区别_HDMI铜线与光纤线有啥区别?为什么铜线传播速度更快?看完涨知识...
  8. python发送邮件并返回提示_python-邮件提醒功能
  9. 牛客《机器学习》习题收集整理
  10. android自动计步_自动计步器app下载
  11. 视频直播技术大全、直播架构、技术原理和实现思路方案整理
  12. JAVAFX输入法的实现
  13. matplotlib绘制树形图之基本配置——万能模板案例
  14. Linux添加硬盘并挂载(超细致)
  15. 个人防骗大全精选(1)
  16. react native 文本只显示两行
  17. 如何在vue中设置全局方法
  18. yii2安装 报错fxp/composer-asset-plugin
  19. 程序人生 | 阿里面试小记
  20. 程序员的英文代号_构建一个代号为1的聊天应用程序2

热门文章

  1. linux数据向量化指令,不充分SIMD向量化技术研究.PDF
  2. mobi格式电子书_这几种电子书格式的关系与区别,资深Kindler有必要了解了解 !...
  3. NodeJs数据库CRUD操作
  4. Android底部导航栏的实现(RadioGroup和Fragment结合使用)
  5. 利用HBuilderX制作手机APP应用程序之知识问答
  6. Android FAE工程师要求,使用AndroidStudio进行系统应用开发
  7. mysql 主键冲突 多个事务回滚_MySQL实战45讲Day38----自增主键不是连续的原因
  8. debian vbox设置_在Debian 9 Stretch系统上安装VirtualBox的两种方法
  9. matlabapp窗口图像_如何在一个matlab窗口上合并两个图像?
  10. layui引入jQuery