Linux-saltstack-2 saltstack的基本使用
@
一、salt命令的基本使用
我们这里有两台被管理机,我以salt-client为被管理端
[root@salt-master ~]# salt-key -L
Accepted Keys:
salt-client
salt-client2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@salt-master ~]# salt '*' test.ping
salt-client:
True
salt-client2:
True
1.基本语法
salt [参数] '要执行的目标主机' 执行的模块名.模块里的方法 [方法的参数]
例子:
这是远程执行shell命令的例子。
#这就是一个完整格式的salt命令
[root@salt-master ~]# salt --out=json 'salt-client' cmd.run 'hostname'
{
"salt-client": "salt-client"
}
[root@salt-master ~]# salt --out=yaml 'salt-client' cmd.run 'hostname'
salt-client: salt-client
解释:
salt:是一个命令
--out:这是salt命令的参数 是将结果按照什么样的格式显示
salt-client:表示目标主机
cmd:是模块
run:ping是test下的方法
hostnmae:就是传递给cmd.run的参数
2.salt的常用参数
(1)-S(大写):通过IP或者是网段匹配被管理主机
[root@salt-master ~]# salt -S '192.168.1.211' test.ping
salt-client:
True
或者
[root@salt-master ~]# salt -S '192.168.1.0/24' test.ping
salt-client:
True
salt-client2:
True
(2)-E:通过正则匹配主机
[root@salt-master ~]# salt -E '.*client' test.ping
salt-client:
True
salt-client2:
True
(3)-L: 匹配多个主机
多个主机之间用逗号隔开
[root@salt-master ~]# salt -L 'salt-client,salt-client2' test.ping
salt-client:
True
salt-client2:
True
(4)-G:通过grain项来匹配
[root@salt-master ~]# salt '*' grains.get os
salt-client:
CentOS
[root@salt-master ~]# salt -G 'os:Centos' test.ping
salt-client:
True
(5)-I:通过pillar来进行匹配
[root@salt-master ~]# salt -I 'pillar参数' test.ping
#后续会有详细介绍
(6)-C:混合模式
说明:因为-C是混合模式同时使用,所以在表达式中要声明你用的是哪种模式
语法:
salt -C '模式简写@表达式,模式简写@表达式,模式简写@表达式...' 模块.方法
#在匹配参数中也可以使用and or not
模式简写 | 模式类型 |
---|---|
G | grains匹配 |
E | pcre正则匹配 |
P | grains 正则匹配 |
L | 列表 |
I | Pillar匹配 |
S | IP地址或者网段号 |
例子:
[root@salt-master ~]# salt -C 'S@192.168.1.0/24 and G@os:Centos' test.ping
salt-client:
True
salt-client2:
True
(7)-N:向指定的组发送命令
#在指定行定义一个web组
[root@salt-master ~]# vim /etc/salt/master
1236 nodegroups:
1237 web:
1238 - 'salt-client'
1239 - 'salt-client2'
#重启master
[root@salt-master ~]# systemctl restart salt-master
#和指定的web组主机通信
[root@salt-master ~]# salt -N 'web' test.ping
salt-client:
True
salt-client2:
True
二、常用的模块以及参数
1.test
(1)test.ping 测试连通性
[root@salt-master ~]# salt '*' test.ping
salt-client:
True
salt-client2:
True
(2)test.version 返回客户端的salt版本
[root@salt-master ~]# salt '*' test.version
salt-client:
3002.2
salt-client2:
3002.2
2.pkg
(1)pkg.install
安装软件rpm的模块以及方法
[root@salt-master ~]# salt 'salt-client2' pkg.install httpd
salt-client2:
----------
httpd:
----------
new:
2.4.6-97.el7.centos
old:
httpd-tools:
----------
new:
2.4.6-97.el7.centos
old:
mailcap:
----------
new:
2.1.41-2.el7
old:
(2)pkg.remove
移除rpm软件包
[root@salt-master ~]# salt 'salt-client2' pkg.remove httpd
salt-client2:
----------
httpd:
----------
new:
old:
2.4.6-97.el7.centos
3.sys
(1)查看所有模块
[root@salt-master ~]# salt '*' sys.list_modules
(2)查看模块都有哪些函数
[root@salt-master ~]# salt '*' sys.list_functions test
(3)查看某个模块或者模块的方法的用法
[root@salt-master ~]# salt '*' sys.doc test
或者
[root@salt-master ~]# salt '*' sys.doc test.ping
4.cmd模块
cmd.run是非常常用的一个方法,在远程主机上执行命令
[root@salt-master salt]# salt '*' cmd.run 'head -1 /etc/passwd |sed 's/root/admin/g''
salt-client:
admin:x:0:0:admin:/admin:/bin/bash
5.file模块
[root@salt-master ~]# mkdir /srv/salt/file -p
[root@salt-master ~]# cd /srv/salt/file/
[root@salt-master file]# ls
test.sls test.txt
[root@salt-master file]# cat test.sls
send_file:
file.managed:
- source:
- salt://file/test.txt
- name: /root/test.txt
- user: root
- group: root
- mode: 777
解释:
send_file:自定义的任务名称
file:模块名
managed: file模块中的方法
source: 源文件地址,因为使用了salt:// 就表示在base(/src/salt)环境下
name : 文件目标位置以及名称
user、group: 文件的属主和属组
mode:文件的权限
执行file目录下的test文件
[root@salt-master ~]# salt 'salt-client' state.sls file.test
发现客户端已经有了master传过来的文件了
[root@salt-client ~]# ls test.txt
test.txt
三、sls文件
sls指 SaLt State.
sls其本质就是python中的字典,以键值对的形式存在,python中的代码如下
>>> a = {"name":"zhangsan","age":20}
>>> print a["name"]
zhangsan
>>> print a["age"]
20
state和pillar系统中,都有一个名为top.sls的文件,用于将SLS文件拉在一起并指定在哪个环境下应该为Minion提供哪些SLS文件
1.sls文件路径配置
/srv/salt目录下的文件用于定义salt state。
三个环境(base、dev、prod)分别代表了不同的系统路径。在指定sls文件路径时写"环境"名称就可以了,就不用写那么长的系统路径了。这样就很方便
[root@salt-master ~]# vim /etc/salt/master
663 # file_roots:
664 # base: #基础环境
665 # - /srv/salt/
666 # dev: #开发环境
667 # - /srv/salt/dev/services
668 # - /srv/salt/dev/states
669 # prod: #生产环境
670 # - /srv/salt/prod/services
671 # - /srv/salt/prod/states
672 #
2.SLS文件实例
(1)创建sls文件默认的存储路径
[root@salt-master ~]# mkdir -p /srv/salt
(2)编写一个安装vsftpd服务的sls文件
[root@salt-master ~]# cd /srv/salt/
[root@salt-master salt]# vim vsftpd.sls
vsftpd_install:
pkg.installed:
- name: vsftpd
解释:
vsftpd_install: 是一个名称,可以自定义。但是要保证唯一
pkg.installed: 是pkg模块里的installed方法。这和命令行里直接使用有些区别
- name: 要安装的rpm包名称
"-" 的意思说 -后的内容是一个列表中的值
注意:
(1)不要使用tab键缩进
(2)以空位为单位进行层次划分
(3)冒号后边如果要编写值得话 需要加一个空格
(4)- 和后边得key 也要有一个空格来分开
(3)执行我们编写得sls文件
语法:
salt '目标主机' state.sls 要执行的sls文件
执行结果如下:
在执行的时候salt 会自动到基础环境路径去搜索vsftod.sls文件。也就是master配置文件中base规定的路径(/srv/salt)下去找。
[root@salt-master ~]# salt 'salt-client2' state.sls vsftpd
salt-client2:
----------
ID: vsftpd_install
Function: pkg.installed
Name: vsftpd
Result: True
Comment: The following packages were installed/updated: vsftpd
Started: 16:35:24.014509
Duration: 5759.362 ms
Changes:
----------
vsftpd:
----------
new:
3.0.2-28.el7
old:
Summary for salt-client2
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
Total run time: 5.759 s
(4)启动服务
我们发现服务器确实安装了,但是没有启动。可以在加入一个模块,让服务安装完毕之后在立即启动。
[root@salt-client2 ~]# rpm -qa |grep vsftpd
vsftpd-3.0.2-28.el7.x86_64
[root@salt-client2 ~]# netstat -antpu |grep vsftpd
重新在编辑vsftpd.sls文件
vsftpd_install:
pkg.installed:
- name: vsftpd
start_vsftpd:
service.running:
- name: vsftpd
- enable: true
解释:
service.running :启动服务的模块
name: 指定要启动的服务
enable: 设置开机启动
(5)安装、启动多个服务
[root@salt-master ~]# vim /srv/salt/vsftpd.sls
vsftpd_install:
pkg.installed:
- names:
- vsftpd
- samba
- rrdtool
start_vsftpd:
service.running:
- names:
- vsftpd
- smb
- enable: true
#-name 变成 -names
3.归类文件
以上是我们是值写了一个sls文件,如果有多个,全部在/srv/salt下不进行归类,显的很乱。那么我们就需要将相同类型的SLS文件放到一个文件夹下。
[root@salt-master ~]# mkdir /srv/salt/service/
[root@salt-master ~]# mv /srv/salt/vsftpd.sls /srv/salt/service/
这样在执行sls文件的时候就需要加上目录名称了。目录还有文件之间的分隔符号需要用. 而不是/
执行命令如下:
[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文件
[root@salt-master ~]# cd /srv/salt/
[root@salt-master salt]# ls
service top.sls
[root@salt-master salt]# tree
.
├── service
│ ├── samba_dir
│ │ └── samba.sls
│ └── vsftpd_dir
│ └── vsftpd.sls
└── top.sls
2.创建top.sls文件
在base环境的根目录下(/srv/salt)创建top.sls,内容如下:
[root@salt-master ~]# cat /srv/salt/top.sls
base:
'salt-client':
- service.vsftpd_dir.vsftpd
'salt-client2':
- 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文件
[root@salt-master salt]# cat service/vsftpd_dir/vsftpd.sls
vsftpd_install:
pkg.installed:
- names:
- vsftpd
start_vsftpd:
service.running:
- names:
- vsftpd
- enable: true
[root@salt-master salt]# cat service/samba_dir/samba.sls
samba_install:
pkg.installed:
- names:
- samba
start_samba:
service.running:
- names:
- smb
- enable: true
4.执行top.sls文件
[root@salt-master ~]# salt '*' state.highstate
在命令行执行次命令 就会自动调用top.sls文件
五、定义资源的依赖关系
1.unless判断
unless是cmd.run的一个参数 ,只有unless后的命令执行失败,name参数对应的命令才执行。其实就是防止shell命令被重复执行
[root@salt-master salt]# cat /srv/salt/test.sls
cmd run test file:
cmd.run:
- name: "echo 'test' > /root/test"
查看客户端
[root@salt-client ~]# cat /root/test
test
加上unless判断
在客户端文件中过滤123 因为没有过滤到 失败了 所以就执行上边的name后边得命令
[root@salt-master salt]# cat test.sls
cmd run test file:
cmd.run:
- name: "echo '123' >> /root/test"
- unless: grep "123" /root/test
查看客户端test文件
[root@salt-client ~]# cat test
test
123
2.require require_in 定义依赖关系
require:我依赖于谁
require_in:我被谁依赖
语法:
- require:
依赖的模块名: 此模块执行的任务名
[root@salt-master salt]# cat test.sls
install httpd service:
pkg.installed:
- name: httpd
start httpd service:
service.running:
- name: httpd
- enable: True
- requeire:
- pkg: install httpd service
Linux-saltstack-2 saltstack的基本使用的更多相关文章
- linux系统下saltstack的安装和配置
Saltstack是一个新的基础设施管理工具,两大功能:远程执行和配置管理. Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具.由Master和Minion构成,通过Zer ...
- Linux下安装SaltStack
一.配置yum源和epel源 epel源下载地址:http://pan.baidu.com/s/1o7NJ26u 1.配置yum源 (1)上传操作系统镜像文件来配置yum源,挂载点目录为/yum mk ...
- 【Saltstack】Saltstack简单说明
[Saltstack] Saltstack是一个服务器集中管理中心平台,可以帮助管理员轻松的对若干台服务器进行统一操作.类似的工具还有Ansible,Puppet,func等等.相比于这些工具,sal ...
- 【saltstack】saltstack执行结果和事件存储到mysql
前言 项目中使用saltstack有一段时间了,之前都是在控制台操作,后来感觉越来越不方便,每次操作需要登陆服务器,还需要记一堆命令.最重要的是,公司进新人之后,新人由于不熟悉saltstack,容易 ...
- 【SaltStack】SaltStack研究心得
基础篇 ------------------------------------------------------------------------------------------------ ...
- saltstack(六) saltstack Job管理
一,简介 Jid: job id 格式为%Y%m%d%H%M%S%f master在下发指令消息时,会附带上产生的jid,minion在接收到指令开始执行时,会在本地的cachedir(默认是/var ...
- saltstack(五) saltstack的state状态管理
一,YAML语法 首先先了解一下YAML,默认的SLS文件的renderer是YAML renderer.YAML是一个有很多强大特性的标记性语言.Salt使用了一个YAML的小型子集,映射非常常用的 ...
- saltstack(四) saltstack的targeting、分组
targeting支持如下matcher: Globing : '*', 正则: 指定-E参数,正则表达式匹配多个 List: 指定-L参数,salt -E 'web1-(prod|devel)' t ...
- SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流
SaltStack介绍和架构解析 简介 SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltSta ...
- linux自动化运维工具Ansible saltstack Puppet、Chef、Fabric之间的对比
发现分布式是一个发展的趋势,无论是大型网站的负载均衡架构还是大数据框架部署,以及云存储计算系统搭建都离不开多台服务器的连续部署和环境搭建. 当我们的基础架构是分散式或者基于云的,并且我们经常需要处理在 ...
随机推荐
- Socket通信和多线程的总结
1.ServerSocket进行多线程接收 package com.yh.chat; import java.io.IOException; import java.net.ServerSocket; ...
- SpringMvc分析
1.用户单击某个请求路径,发起一个request请求,此请求会被前端控制器(DispatcherServlet)处理 2.前端控制器(DispatcherServlet)请求处理器映射器(Handle ...
- 通过DT10获取程序执行过程中的实时覆盖率
DT10是新一代的动态测试工具,可以长时间跟踪记录目标程序执行情况,获取目标程序动态执行数据,帮助进行难于重现的Bug错误分析,覆盖率检测,性能测试,变量跟踪等等功能. 系统测试覆盖率,通常是用于判断 ...
- ANTLR 环境准备
基本环境: JDK8 Maven IntelliJ IDEA IntelliJ IDEA中安装ANTLR v4插件 在IntelliJ IDEA插件仓库中搜索ANTLR v4插件并安装,如下图: 看个 ...
- 第43篇-JNI引用的管理(2)
之前我们已经介绍了JNIHandleBlock,但是没有具体介绍JNIHandleBlock中存储的句柄,这一篇我们将详细介绍对这些句柄的操作. JNI句柄分为两种,全局和局部对象引用: (1)大部分 ...
- thinkphp or查询
$map['source'] = array(array('eq',0),array('eq',1), 'or'); $this->model->where($map)
- Java Web三大组件之过滤器(Filter)
什么是过滤器?有什么用? 过滤器JavaWeb三大组件之一,它与Servlet很相似.不过滤器是用来拦截请求的,而不是处理请求的.过滤,顾名思义,就是留下我们想要的,丢掉我们不需要的.例如:某个网站的 ...
- [BUUCTF]PWN1——test_your_nc
[BUUCTF]PWN1-test_your_nc 题目网址:https://buuoj.cn/challenges#test_your_nc 步骤: 根据题目提示,nc一下靶场 2.nc连接上后ls ...
- Sql Server、Oracle、MySQL 日期格式化函数处理
目录 Sql Server Oracle MySql Sql Server CONVERT ( '取数长度' , '时间' , '类型') 查询对应时间: 2021-03-17T19:18:18.00 ...
- box-shadow(盒子阴影)
box-shadow 属性可以设置一个或多个下拉阴影的框 可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开.该属性可设置的值包括阴影的X轴偏移量.Y轴偏移量.模糊半径.扩散半径和颜色. 语法: ...