又研究了一天saltstack,这东西干什么用的,大概也可以说出个一二了。

好了,saltstack这东西。大概能干这些活

  1. 远程执行命令,比如我看一下所有机器操作系统的version,用这东西就简单多了。

  2. 配置,配置apache,mysql等等都可以用它

  3. 软件安装

  4. 服务启动,重启

  5. 信息收集归档

下面说说,master和minion各自干了哪些活

master:

  1. 存放所有minion的公钥

  2. 监听mininon

  3. 发送命令给minion

  4. 存放一些为minion准备的配置文件,如state

  5. 存放一些为minion准备的files和数据,如apache2.cnf,pillar

minion:

  1. 连接master

  2. 监听master发送的commands

  3. 从master下载state并且执行state

  4. 可以执行在minion上执行state,用salt-call,当然这个一般多数用于调试

好了,总结了一下,下面开始写state这东西了。

state这玩意是个什么玩意呢?英文翻译一下是"状态"的意思。没错,就是状态,我们想象一下minions要达到什么样的状态,比如说:装什么软件,配置成什么样,服务是该运行还是该停止等等状态。。。。我们只要用state定义了,然后minions去执行,我们的客户端就会成为我们在state中定义的那个状态了。

另外一种理解是,其实master指导minions干活,无外乎两种方式一种是通过远程执行命令,另外一种方式就是state了。  state也可以理解为按照一定的逻辑把命令组织成脚本。。就像linux里面的shell脚本一样。。。显而易见,有组织有纪律的state干起活来肯定比单枪匹马执行一个命令厉害多了。

下面说一下state的结构吧

默认存放的路径是/srv/salt,当然也可以改成别的路径,也可以添加多个路径。不过匹配state的时候会优先匹配上面的路径。比如:

/srv/salt/在 /home/salt/的上面设置,我们执行salt state.sls user的时候,会优先匹配/srv/salt/user.sls

此外:/srv/salt/这个路径也是salt默认的文件服务器的路径,比如说我们想用salt访问/srv/salt/files/mysql.cnf这个文件,需要这么去访问salt://files/mysql.cmf

楼主写了几个简单的小例子,记录了下state的用法。看一下楼主的目录结构吧

tree一下:

 root@salt-master:/srv/salt# tree
.
├── apache2
│   ├── files
│   │   └── apache2.conf
│   └── init.sls
├── mysql
│   ├── conf2.sls
│   ├── conf.sls
│   ├── files
│   │   ├── my.cnf
│   │   └── my.cnf1
│   └── install.sls
├── top.sls
└── users└── init.sls
└── init.sls

看看top.sls,比较一下内容和上面tree的目录结构,大概就应该知道top.sls的结构规则了。

当然第2行的target,满足上一篇讲的那些匹配规则

root@salt-master:/srv/salt# cat -n top.sls 1  base:2    'oscodename:Wheezy':3      - match: grain4      - users5      - apache26      - mysql.install7      - mysql.conf

看看apache2的state配置,第1行的apache2是下面这一系列内容作用的目标,2,4,10行是状态开始定义的行,3,5,14,15,16这些行是我们的目标将要达到的状态。 6行的require的意思是必须满足 -pkg: apache2这个状态,也就是说apache2安装之后service后面这一串才会起作用。

8行的watch除了require的功能外,还有的功能就是一旦apache2.conf这个被监控的文件发生改变,service这一串东西就会起作用。其它的应该都比较简单

root@salt-master:/srv/salt# cat -n  apache2/init.sls 1  apache2:2    pkg:3      - installed4    service:5      - running6      - require:7        - pkg: apache28      - watch:9        - file: /etc/apache2/apache2.conf10    file:11      - managed12      - name: /etc/apache2/apache2.conf13      - source: salt://apache2/files/apache2.conf14      - owner: lixc15      - group: lixc16      - mode: 644

看看users这个state模块,这个模块使用了jinja2模板,可以实现更复杂的逻辑,比如说:变量,循环,条件选择等

root@salt-master:/srv/salt/users# cat -n init.sls 1  {%for username in 'lxc','wwd','wxw','qhl'%}2  `username`:3    user:4      - present5  {%if username != 'lxc'%}6      - shell: /usr/sbin/nologin7  {%endif%}8  {%endfor%}

看一下mysql目录先的三个文件。

其实install.sls和conf.sls合在一起。就是上面的apache2差不多了。。分开写执行为了测试,这种用法。conf2.sls中的1行include可以包涵其它的sls文件,4行的extend里的内容,将会覆盖conf.sls里面对应的内容

root@salt-master:/srv/salt/mysql# for filename in `ls *sls`;do echo -e "$filename\n" ;cat $filename;done
conf2.sls1  include:2    - conf.sls34  extend:5    /etc/mysql/my.cnf:6      - file.managed:7        - source: salt://mysql/files/my.cnf1
conf.sls1  /etc/mysql/my.cnf:2    file.managed:3      - source: salt://mysql/files/my.cnf4      - owner: lixc5      - group: lixc6      - mode: 6447  mysql:8    service:9      - running10      - require:11        - pkg: mysql-server12      - watch:13        - file: /etc/mysql/my.cnf
install.sls1  mysql-server:2    pkg:3      - installed4

好了,把这些个东西搞会,state算是初入门路了,离精通还十万八千里。最后说一下怎么执行state吧

执行某一个state,比如说apache2这个state吧

salt '*' state.sls apache2

执行这段的时候,salt首先会到/srv/salt目录下面找apache2.sls这个文件,有则执行。没有则找apache2目录下的init.sls这个文件,有则执行,没有就报错了。

再执行下mysql下面的state

salt '*' state.sls mysql.install

看到了没,mysql下面没有init.sls文件。我们只能指定具体的sls去执行了。注意那个.点号

上面说的两种方式,只执行某一个state。如果想执行所有state该咋办呢。

首先,要把我们需要执行的state在top.sls里面定义好,然后执行下面的命令

salt '*' state.highstate

执行这个命令的时候,salt会去找/srv/salt/目录下的top.sls文件,然后执行。

除了以上几种执行state的方式,还有别的方式吗,答案是肯定的。

其实在minion上面也可以执行。

咋执行呢?

首先要保证minion配置文件,file_client为remote(默认就是remote)

root@salt-minion:/var/cache/salt/minion# grep "#file_client" /etc/salt/minion
#file_client: remote
然后在minion上执行
salt-call  state.highstate

好了,这个是个啥原理呢,原理是minion执行salt-call state.highstate操作的时候,minion会主动到

master上面把/srv/salt/top.sls里面定义的东西下载到本地,然后执行。  根据minion这么个特点,当然我们也可以salt-call highstate放到crontab里面去,这样客户端就可以主动的定期检查master上的state是否有更新了。

哈哈,先到这里吧

转载于:https://blog.51cto.com/lixcto/1429038

saltstack(三)state相关推荐

  1. ansible puppet saltstack三款自动化运维工具的对比

    一.基础介绍 ansible基础介绍可参考:http://www.linuxidc.com/Linux/2017-12/149671.htm puppet基础介绍可参考:http://www.linu ...

  2. saltstack执行state.sls耗时长的坑

    一直用的 jenkins + saltstack 自动化构建发布项目,一共也就不超过20台服务器,奈何运行时间越来越慢,并且负载越来越高(这里大部分都是使用state模块),但是不用state模块效率 ...

  3. SaltStack配置管理之Gains与State测试

    SaltStack的Grains主要是收集了minion的一些配置信息,如CPU.内存.硬盘.网络.操作系统等很少发生变化的静态数据,我们也可以在minion自定义Grains项和相应的值,Grain ...

  4. saltstack state.sls

    配置: 修改master配置文件,告诉master, state.sls作业存放的路径 file_roots:base:- /srv/salt/basedev:- /srv/salt/dev 注: 配 ...

  5. 自动化运维之SaltStack实践

    自动化运维之SaltStack实践 1.1.环境 linux-node1(master服务端) 192.168.0.15 linux-node2(minion客户端) 192.168.0.16 1.2 ...

  6. saltstack与ansible对比

    Saltstack Ansible SaltStack 依靠ZeroMQ速度快 Ansible SSH传输速度慢一些 ZeroMQ本身不加密,AES加密,需注意MITM攻击 SSH安全性高 Maste ...

  7. Ansible自动化运维工具使用

    概述 本文描述自动化运维工具 Ansible 的安装及基础使用方法,包含: Centos 下的安装 主机配置 Ad-Hoc command(命令行执行) Playbook (任务剧本) Ansible ...

  8. Ansible安装使用

    Ansible安装使用 1. Ansible安装 1.1 配置eprl源 yum install epel-release 1.2 yum安装ansible yum install ansible 1 ...

  9. 运维之道 | Ansible 安装使用

    前言 Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务 Ansible的特点 ansible不需要单独安装客户端,也不需要启动任何服务 ...

  10. ansible的剧本Playbook

    1.Playbook介绍 .2.Playbook核心元素 3.Playbook 语法 4.Playbook 的运行方式 5.Playbook中元素属性 6. Playbook中变量的使用. 7.Pla ...

最新文章

  1. k means聚类算法_一文读懂K-means聚类算法
  2. 皮一皮:追忆我那随风逝去的阔腿裤...
  3. 107.网络服务质量包括哪些(QoS)
  4. Android - 文件读写操作 总结
  5. php接口数据加密、解密、验证签名【转】
  6. docker修改php.ini,docker部署更改php的upload_max_filesize
  7. 什么是I/O地址,I/O端口和I/O端口地址?
  8. r720换固态硬盘后如何重装系统_联想R720重装Winddows10无法识别固态硬盘咋办
  9. 区块链 solidity io密集
  10. egret接vivo小游戏
  11. 向量自回归VAR模型、结构向量自回归SVAR模型、VMA模型
  12. selenium下载或保存图片最好的方法
  13. c语言网页版在线编译器_梦幻西游网页版在线玩 梦幻西游网页版礼包兑换码_梦幻西游网页版...
  14. MVC模式初体验 properties解析工具 与 Dao层的结合 —————— 开开开山怪
  15. Musical Christmas Lights——一个圣诞树灯光✨随音乐节奏改变的前端开源项目
  16. [会员积分运营了解]各大主流电商平台会员及积分体系概况集合!
  17. insert...on duplicate key update语法详解
  18. kinhdown稳定版无法连接服务器,KinhDown稳定版
  19. 计算机考研真题解析---计算机网络
  20. 解决Google Colab 读取Google Drive(云盘) 文件速度慢

热门文章

  1. 同样版本的jstl,都是jstl1.2版本,有个有问题,另一个没有问题
  2. 沉痛哀悼在汶川特大地震中的遇难者!!!!!
  3. 归并排序(merge sort)算法实现
  4. 转载 — 问题解决:Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) y
  5. Android学习之在Eclipse看源代码的技巧
  6. Android之使用MediaPlayer和SurfaceView组件播放一个简单的视频
  7. 中世纪判断女巫的方法总结
  8. Log4j2进阶使用(按大小时间备份日志)
  9. Linux 多网卡bond
  10. BroadcastChannel页面间通讯