@

目录

一、salt命令的基本使用

我们这里有两台被管理机,我以salt-client为被管理端

  1. [root@salt-master ~]# salt-key -L
  2. Accepted Keys:
  3. salt-client
  4. salt-client2
  5. Denied Keys:
  6. Unaccepted Keys:
  7. Rejected Keys:
  8. [root@salt-master ~]# salt '*' test.ping
  9. salt-client:
  10. True
  11. salt-client2:
  12. True

1.基本语法

  1. salt [参数] '要执行的目标主机' 执行的模块名.模块里的方法 [方法的参数]

例子:

这是远程执行shell命令的例子。

  1. #这就是一个完整格式的salt命令
  2. [root@salt-master ~]# salt --out=json 'salt-client' cmd.run 'hostname'
  3. {
  4. "salt-client": "salt-client"
  5. }
  6. [root@salt-master ~]# salt --out=yaml 'salt-client' cmd.run 'hostname'
  7. salt-client: salt-client

解释:

salt:是一个命令

--out:这是salt命令的参数 是将结果按照什么样的格式显示

salt-client:表示目标主机

cmd:是模块

run:ping是test下的方法

hostnmae:就是传递给cmd.run的参数

2.salt的常用参数

(1)-S(大写):通过IP或者是网段匹配被管理主机

  1. [root@salt-master ~]# salt -S '192.168.1.211' test.ping
  2. salt-client:
  3. True
  4. 或者
  5. [root@salt-master ~]# salt -S '192.168.1.0/24' test.ping
  6. salt-client:
  7. True
  8. salt-client2:
  9. True

(2)-E:通过正则匹配主机

  1. [root@salt-master ~]# salt -E '.*client' test.ping
  2. salt-client:
  3. True
  4. salt-client2:
  5. True

(3)-L: 匹配多个主机

多个主机之间用逗号隔开

  1. [root@salt-master ~]# salt -L 'salt-client,salt-client2' test.ping
  2. salt-client:
  3. True
  4. salt-client2:
  5. True

(4)-G:通过grain项来匹配

  1. [root@salt-master ~]# salt '*' grains.get os
  2. salt-client:
  3. CentOS
  4. [root@salt-master ~]# salt -G 'os:Centos' test.ping
  5. salt-client:
  6. True

(5)-I:通过pillar来进行匹配

  1. [root@salt-master ~]# salt -I 'pillar参数' test.ping
  2. #后续会有详细介绍

(6)-C:混合模式

说明:因为-C是混合模式同时使用,所以在表达式中要声明你用的是哪种模式

  1. 语法:
  2. salt -C '模式简写@表达式,模式简写@表达式,模式简写@表达式...' 模块.方法
  3. #在匹配参数中也可以使用and or not
模式简写 模式类型
G grains匹配
E pcre正则匹配
P grains 正则匹配
L 列表
I Pillar匹配
S IP地址或者网段号

例子:

  1. [root@salt-master ~]# salt -C 'S@192.168.1.0/24 and G@os:Centos' test.ping
  2. salt-client:
  3. True
  4. salt-client2:
  5. True

(7)-N:向指定的组发送命令

  1. #在指定行定义一个web组
  2. [root@salt-master ~]# vim /etc/salt/master
  3. 1236 nodegroups:
  4. 1237 web:
  5. 1238 - 'salt-client'
  6. 1239 - 'salt-client2'
  7. #重启master
  8. [root@salt-master ~]# systemctl restart salt-master
  9. #和指定的web组主机通信
  10. [root@salt-master ~]# salt -N 'web' test.ping
  11. salt-client:
  12. True
  13. salt-client2:
  14. True

二、常用的模块以及参数

1.test

(1)test.ping 测试连通性

  1. [root@salt-master ~]# salt '*' test.ping
  2. salt-client:
  3. True
  4. salt-client2:
  5. True

(2)test.version 返回客户端的salt版本

  1. [root@salt-master ~]# salt '*' test.version
  2. salt-client:
  3. 3002.2
  4. salt-client2:
  5. 3002.2

2.pkg

(1)pkg.install

安装软件rpm的模块以及方法

  1. [root@salt-master ~]# salt 'salt-client2' pkg.install httpd
  2. salt-client2:
  3. ----------
  4. httpd:
  5. ----------
  6. new:
  7. 2.4.6-97.el7.centos
  8. old:
  9. httpd-tools:
  10. ----------
  11. new:
  12. 2.4.6-97.el7.centos
  13. old:
  14. mailcap:
  15. ----------
  16. new:
  17. 2.1.41-2.el7
  18. old:

(2)pkg.remove

移除rpm软件包

  1. [root@salt-master ~]# salt 'salt-client2' pkg.remove httpd
  2. salt-client2:
  3. ----------
  4. httpd:
  5. ----------
  6. new:
  7. old:
  8. 2.4.6-97.el7.centos

3.sys

(1)查看所有模块

  1. [root@salt-master ~]# salt '*' sys.list_modules

(2)查看模块都有哪些函数

  1. [root@salt-master ~]# salt '*' sys.list_functions test

(3)查看某个模块或者模块的方法的用法

  1. [root@salt-master ~]# salt '*' sys.doc test
  2. 或者
  3. [root@salt-master ~]# salt '*' sys.doc test.ping

4.cmd模块

cmd.run是非常常用的一个方法,在远程主机上执行命令

  1. [root@salt-master salt]# salt '*' cmd.run 'head -1 /etc/passwd |sed 's/root/admin/g''
  2. salt-client:
  3. admin:x:0:0:admin:/admin:/bin/bash

5.file模块

  1. [root@salt-master ~]# mkdir /srv/salt/file -p
  2. [root@salt-master ~]# cd /srv/salt/file/
  3. [root@salt-master file]# ls
  4. test.sls test.txt
  5. [root@salt-master file]# cat test.sls
  6. send_file:
  7. file.managed:
  8. - source:
  9. - salt://file/test.txt
  10. - name: /root/test.txt
  11. - user: root
  12. - group: root
  13. - mode: 777
  14. 解释:
  15. send_file:自定义的任务名称
  16. file:模块名
  17. managed: file模块中的方法
  18. source 源文件地址,因为使用了salt:// 就表示在base(/src/salt)环境下
  19. name : 文件目标位置以及名称
  20. usergroup: 文件的属主和属组
  21. mode:文件的权限

执行file目录下的test文件

  1. [root@salt-master ~]# salt 'salt-client' state.sls file.test

发现客户端已经有了master传过来的文件了

  1. [root@salt-client ~]# ls test.txt
  2. test.txt

三、sls文件

sls指 SaLt State.

sls其本质就是python中的字典,以键值对的形式存在,python中的代码如下

  1. >>> a = {"name":"zhangsan","age":20}
  2. >>> print a["name"]
  3. zhangsan
  4. >>> print a["age"]
  5. 20

state和pillar系统中,都有一个名为top.sls的文件,用于将SLS文件拉在一起并指定在哪个环境下应该为Minion提供哪些SLS文件

1.sls文件路径配置

/srv/salt目录下的文件用于定义salt state。

三个环境(base、dev、prod)分别代表了不同的系统路径。在指定sls文件路径时写"环境"名称就可以了,就不用写那么长的系统路径了。这样就很方便

  1. [root@salt-master ~]# vim /etc/salt/master
  2. 663 # file_roots:
  3. 664 # base: #基础环境
  4. 665 # - /srv/salt/
  5. 666 # dev: #开发环境
  6. 667 # - /srv/salt/dev/services
  7. 668 # - /srv/salt/dev/states
  8. 669 # prod: #生产环境
  9. 670 # - /srv/salt/prod/services
  10. 671 # - /srv/salt/prod/states
  11. 672 #

2.SLS文件实例

(1)创建sls文件默认的存储路径

  1. [root@salt-master ~]# mkdir -p /srv/salt

(2)编写一个安装vsftpd服务的sls文件

  1. [root@salt-master ~]# cd /srv/salt/
  2. [root@salt-master salt]# vim vsftpd.sls
  3. vsftpd_install:
  4. pkg.installed:
  5. - name: vsftpd
  6. 解释:
  7. vsftpd_install: 是一个名称,可以自定义。但是要保证唯一
  8. pkg.installed: pkg模块里的installed方法。这和命令行里直接使用有些区别
  9. - name: 要安装的rpm包名称
  10. "-" 的意思说 -后的内容是一个列表中的值
  11. 注意:
  12. 1)不要使用tab键缩进
  13. 2)以空位为单位进行层次划分
  14. 3)冒号后边如果要编写值得话 需要加一个空格
  15. 4)- 和后边得key 也要有一个空格来分开

(3)执行我们编写得sls文件

  1. 语法:
  2. salt '目标主机' state.sls 要执行的sls文件

执行结果如下:

在执行的时候salt 会自动到基础环境路径去搜索vsftod.sls文件。也就是master配置文件中base规定的路径(/srv/salt)下去找。

  1. [root@salt-master ~]# salt 'salt-client2' state.sls vsftpd
  2. salt-client2:
  3. ----------
  4. ID: vsftpd_install
  5. Function: pkg.installed
  6. Name: vsftpd
  7. Result: True
  8. Comment: The following packages were installed/updated: vsftpd
  9. Started: 16:35:24.014509
  10. Duration: 5759.362 ms
  11. Changes:
  12. ----------
  13. vsftpd:
  14. ----------
  15. new:
  16. 3.0.2-28.el7
  17. old:
  18. Summary for salt-client2
  19. ------------
  20. Succeeded: 1 (changed=1)
  21. Failed: 0
  22. ------------
  23. Total states run: 1
  24. Total run time: 5.759 s

(4)启动服务

我们发现服务器确实安装了,但是没有启动。可以在加入一个模块,让服务安装完毕之后在立即启动。

  1. [root@salt-client2 ~]# rpm -qa |grep vsftpd
  2. vsftpd-3.0.2-28.el7.x86_64
  3. [root@salt-client2 ~]# netstat -antpu |grep vsftpd

重新在编辑vsftpd.sls文件

  1. vsftpd_install:
  2. pkg.installed:
  3. - name: vsftpd
  4. start_vsftpd:
  5. service.running:
  6. - name: vsftpd
  7. - enable: true

解释:

service.running :启动服务的模块

name: 指定要启动的服务

enable: 设置开机启动

(5)安装、启动多个服务

  1. [root@salt-master ~]# vim /srv/salt/vsftpd.sls
  2. vsftpd_install:
  3. pkg.installed:
  4. - names:
  5. - vsftpd
  6. - samba
  7. - rrdtool
  8. start_vsftpd:
  9. service.running:
  10. - names:
  11. - vsftpd
  12. - smb
  13. - enable: true
  14. #-name 变成 -names

3.归类文件

以上是我们是值写了一个sls文件,如果有多个,全部在/srv/salt下不进行归类,显的很乱。那么我们就需要将相同类型的SLS文件放到一个文件夹下。

  1. [root@salt-master ~]# mkdir /srv/salt/service/
  2. [root@salt-master ~]# mv /srv/salt/vsftpd.sls /srv/salt/service/

这样在执行sls文件的时候就需要加上目录名称了。目录还有文件之间的分隔符号需要用. 而不是/

执行命令如下:

  1. [root@salt-master ~]# salt 'salt-client2' state.sls service.vsftpd

四、top.sls文件

以上情况只是写了1个sls文件,如果有多个sls文件,需要根据不同的主机执行不同的sls文件,这样就需要执行不同的命令行salt指令了。这样情况下top.sls文件就发挥了它的作用了。

top.sls文件就是一个入口文件,规定了在哪些sls文件在哪些主机上执行

1.目录结构

在前边说了sls文件的配置路径有默认的3个环境:base(基础环境)、dev(开发环境)、prod(生产环境)

我们在base环境(srv/salt)下创建一个service目录,在service下创建两个子目录samba_dir、vsftpd_dir.在子目录下在创建samba.sls文件和vsftpd.sls文件

  1. [root@salt-master ~]# cd /srv/salt/
  2. [root@salt-master salt]# ls
  3. service top.sls
  4. [root@salt-master salt]# tree
  5. .
  6. ├── service
  7. ├── samba_dir
  8. └── samba.sls
  9. └── vsftpd_dir
  10. └── vsftpd.sls
  11. └── top.sls

2.创建top.sls文件

在base环境的根目录下(/srv/salt)创建top.sls,内容如下:

  1. [root@salt-master ~]# cat /srv/salt/top.sls
  2. base:
  3. 'salt-client':
  4. - service.vsftpd_dir.vsftpd
  5. 'salt-client2':
  6. - service.samba_dir.samba

解释:

base: 指在base环境下,也就是在/srv/salt目录下,寻找sls文件

'salt-client'、 'salt-client2':指在这些台被管理机上执行sls文件

service.vsftpd_dir.vsftpd: 执行service/vsftpd_dir目录下的vsftrpd.sls文件

3.安装服务的sls文件

  1. [root@salt-master salt]# cat service/vsftpd_dir/vsftpd.sls
  2. vsftpd_install:
  3. pkg.installed:
  4. - names:
  5. - vsftpd
  6. start_vsftpd:
  7. service.running:
  8. - names:
  9. - vsftpd
  10. - enable: true
  1. [root@salt-master salt]# cat service/samba_dir/samba.sls
  2. samba_install:
  3. pkg.installed:
  4. - names:
  5. - samba
  6. start_samba:
  7. service.running:
  8. - names:
  9. - smb
  10. - enable: true

4.执行top.sls文件

  1. [root@salt-master ~]# salt '*' state.highstate

在命令行执行次命令 就会自动调用top.sls文件

五、定义资源的依赖关系

1.unless判断

unless是cmd.run的一个参数 ,只有unless后的命令执行失败,name参数对应的命令才执行。其实就是防止shell命令被重复执行

  1. [root@salt-master salt]# cat /srv/salt/test.sls
  2. cmd run test file:
  3. cmd.run:
  4. - name: "echo 'test' > /root/test"
  5. 查看客户端
  6. [root@salt-client ~]# cat /root/test
  7. test

加上unless判断

  1. 在客户端文件中过滤123 因为没有过滤到 失败了 所以就执行上边的name后边得命令
  2. [root@salt-master salt]# cat test.sls
  3. cmd run test file:
  4. cmd.run:
  5. - name: "echo '123' >> /root/test"
  6. - unless: grep "123" /root/test
  7. 查看客户端test文件
  8. [root@salt-client ~]# cat test
  9. test
  10. 123

2.require require_in 定义依赖关系

require:我依赖于谁

require_in:我被谁依赖

  1. 语法:
  2. - require:
  3. 依赖的模块名: 此模块执行的任务名
  1. [root@salt-master salt]# cat test.sls
  2. install httpd service:
  3. pkg.installed:
  4. - name: httpd
  5. start httpd service:
  6. service.running:
  7. - name: httpd
  8. - enable: True
  9. - requeire:
  10. - pkg: install httpd service

Linux-saltstack-2 saltstack的基本使用的更多相关文章

  1. linux系统下saltstack的安装和配置

    Saltstack是一个新的基础设施管理工具,两大功能:远程执行和配置管理. Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具.由Master和Minion构成,通过Zer ...

  2. Linux下安装SaltStack

    一.配置yum源和epel源 epel源下载地址:http://pan.baidu.com/s/1o7NJ26u 1.配置yum源 (1)上传操作系统镜像文件来配置yum源,挂载点目录为/yum mk ...

  3. 【Saltstack】Saltstack简单说明

    [Saltstack] Saltstack是一个服务器集中管理中心平台,可以帮助管理员轻松的对若干台服务器进行统一操作.类似的工具还有Ansible,Puppet,func等等.相比于这些工具,sal ...

  4. 【saltstack】saltstack执行结果和事件存储到mysql

    前言 项目中使用saltstack有一段时间了,之前都是在控制台操作,后来感觉越来越不方便,每次操作需要登陆服务器,还需要记一堆命令.最重要的是,公司进新人之后,新人由于不熟悉saltstack,容易 ...

  5. 【SaltStack】SaltStack研究心得

    基础篇 ------------------------------------------------------------------------------------------------ ...

  6. saltstack(六) saltstack Job管理

    一,简介 Jid: job id 格式为%Y%m%d%H%M%S%f master在下发指令消息时,会附带上产生的jid,minion在接收到指令开始执行时,会在本地的cachedir(默认是/var ...

  7. saltstack(五) saltstack的state状态管理

    一,YAML语法 首先先了解一下YAML,默认的SLS文件的renderer是YAML renderer.YAML是一个有很多强大特性的标记性语言.Salt使用了一个YAML的小型子集,映射非常常用的 ...

  8. saltstack(四) saltstack的targeting、分组

    targeting支持如下matcher: Globing : '*', 正则: 指定-E参数,正则表达式匹配多个 List: 指定-L参数,salt -E 'web1-(prod|devel)' t ...

  9. SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流

    SaltStack介绍和架构解析 简介 SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltSta ...

  10. linux自动化运维工具Ansible saltstack Puppet、Chef、Fabric之间的对比

    发现分布式是一个发展的趋势,无论是大型网站的负载均衡架构还是大数据框架部署,以及云存储计算系统搭建都离不开多台服务器的连续部署和环境搭建. 当我们的基础架构是分散式或者基于云的,并且我们经常需要处理在 ...

随机推荐

  1. Go语言核心36讲(Go语言实战与应用二十四)--学习笔记

    46 | 访问网络服务 前导内容:socket 与 IPC 人们常常会使用 Go 语言去编写网络程序(当然了,这方面也是 Go 语言最为擅长的事情).说到网络编程,我们就不得不提及 socket. s ...

  2. 『与善仁』Appium基础 — 22、获取元素信息的操作(一)

    目录 1.获取元素文本内容 (1)text()方法 (2)get_attribute()方法 (3)综合练习 2.获取元素在屏幕上的坐标 1.获取元素文本内容 (1)text()方法 业务场景: 进入 ...

  3. frp实现基于反向代理的内网穿透

    个人博客主页: xzajyjs.cn frp是什么 简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP.TCP.UDP等众多协议 ...

  4. ES6解构赋值的简单使用

    相较于常规的赋值方式,解构赋值最主要的是'解构'两个字,在赋值的过程中要清晰的知道等号右边的结构. 先简单地看一下原来的赋值方式. var a=[1,2] 分析一下这句代码的几个点: (1)变量申明和 ...

  5. CF1514A Perfectly Imperfect Array 题解

    Content 给定一个长度为 \(n\) 的序列,问是否存在一个非空子序列,使得这个子序列所有元素的积不是完全平方数. 数据范围:\(t\) 组数据,\(1\leqslant t\leqslant ...

  6. Centos使用kafka自带zookeeper安装kafka

    首先要安装jdk环境 可以参考:https://www.cnblogs.com/pxblog/p/10512886.html 下载kafka 地址:http://kafka.apache.org/do ...

  7. thymeleaf标签在js中调用转义变量与不转义变量写法

    转义写法 [[${content.title}]] 不转义写法 有时候我们可能需要在页面上显示html代码 这样的话 就不能把字符串转义了 这时候可以采用下面这种写法 [(${content.txt} ...

  8. vc++ 调用winapi调节屏幕亮度(增加win7代码demo)

    1.关于 代码是通过测试的,测试环境: win7 + MFC 为什么要发在这里? 区别于上一篇随笔. MD排版更顺眼 demo 会放到 这里 更正了上一篇随笔中的代码错误 2.头文件 #include ...

  9. 【LeetCode】56. Merge Intervals 解题报告(Python & C++ & Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  10. 【LeetCode】935. Knight Dialer 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划TLE 空间换时间,利用对称性 优化空间复杂 ...